Transcript LINQ

www.evacast.net
ADO.NET Entity Framework 소개
한용희
Microsoft Visual C# MVP
http://blog.naver.com/woom333
차례
Programmer VS. Data Base Administrator
Object VS. Data
LINQ
LINQ Project
데이터를 처리하는 기존 방식
LINQ to SQL을 이용한 데이터 처리 방식
LINQ to SQL 아키텍처
LINQ to SQL
LINQ to Entities
LINQ to DataSet
유연한 매핑
M:N 매핑
Entity Splitting
Table per Hierarchy
TPH 활용 방안
Table per Type
TPT 활용방안
www.evacast.net
www.evacast.net
Programmer VS. Data Base Administrator
Programmer
Data Base Administrator
Object
Data
Member.Select(유형=우수회원);
Imperative
SELECT * FROM Member
WHERE 유형 = 우수회원
Declarative
www.evacast.net
Object VS. Data
Table
Object
Table
Conceptual
Model
Mapping
Storage
Model
Table
www.evacast.net
LINQ
(Language Integrated Queries)
www.evacast.net
LINQ Project
C# 3.0
Visual Basic
9.0
Others
.NET Language Integrated Query
LINQ to
Objects
LINQ to
DataSets
LINQ to
SQL
LINQ to
Entities
LINQ to
XML
<book>
<title/>
<author/
>
<year/>
<price/>
</book>
Objects
Relational
XML
www.evacast.net
데이터를 처리하는 기존 방식
Queries in
SqlConnection c = new SqlConnection(…); quotes
c.Open();
SqlCommand cmd = new SqlCommand(
@"SELECT c.Name, c.Phone
Loosely bound
arguments
FROM Customers c
WHERE c.City = @p0");
cmd.Parameters.AddWithValue("@p0", "London“);
DataReader dr = c.Execute(cmd);
while (dr.Read()) {
Loosely typed
result sets
string name = dr.GetString(0);
string phone = dr.GetString(1);
DateTime date = dr.GetDateTime(2);
}
dr.Close();
No compile time
checks
www.evacast.net
LINQ to SQL을 이용한 데이터 처리 방식
public class Customer { … }
Classes
describe data
public class Northwind: DataContext
{
public Table<Customer> Customers;
…
}
Northwind db = new Northwind(…);
var contacts =
from c in db.Customers
where c.City == "London"
select new { c.Name, c.Phone };
Tables are like
collections
Strongly typed
connection
Integrated
query syntax
Strongly typed
results
LINQ to SQL 아키텍처
www.evacast.net
db.Customers.Add(c1);
c2.City = “Seattle";
db.Customers.Remove(c3);
from c in db.Customers
where c.City == "London"
select c.CompanyName
Enumerate
Objects
SubmitChanges()
SQL Query
or SProc
Rows
DML
or SProcs
SELECT CompanyName
FROM Customer
WHERE City = 'London'
INSERT INTO Customer …
UPDATE Customer …
DELETE FROM Customer …
www.evacast.net
1. 데이터를 처리하는 기존 방식
2. LINQ to SQL을 이용한 데이터 처리 방식
LINQ to SQL
www.evacast.net
신속한 개발을 해야 할 때
Microsoft SQL Server만 지원
직접 매핑(Direct Mapping)
한 클래스는 SQL 스키마 한 객체에 직접 대응
테이블 , 뷰
저장 프로시저, 테이블 값 함수(Table Valued Function)
테이블, 컬럼에 대한 이름 변경
외래키를 통하여 관계를 설정
상속
TPH (Table per Hierarchy) 지원
LINQ to Entities
www.evacast.net
엔터프라이즈급에서 사용
다양한 DB(Oracle, DB2, Microsoft SQL Server)
사용 가능
유연한 매핑(Flexible Mapping)
하나의 클래스를 다수의 테이블/뷰와 매핑
상속
TPH (Table per Hierarchy)
TPT (Table per Type)
Complex Type (예: 주소[시,구,동,번지] 타입)
M:N 관계 표현
LINQ to DataSet
www.evacast.net
비 연결 기반 (Disconnected Cache)
형식화된 데이터 집합(Typed DataSet)
필드명으로 참조
var query = from row in myDataSet.Tables["Customers"].AsEnumerable()
where row .Field<string>("City") == "London"
select new { row.Field <string> ("CustomerID"),
row.Field <string> ("ContactName") } ;
형식화 되지 않은 데이터 집합(Untyped DataSet)
강력한 타입으로 참조
var query = from customer in northwind.Customers
where customer.City == "London"
select customer;
www.evacast.net
유연한 매핑
(Flexible Mapping)
- ADO.NET Entity Framework의 특징
www.evacast.net
M:N 매핑
Entity Data Model
M
Employees
N
Relational Data Source
1 M EmployeeTe N 1
Territories
Employees
EmployeeID
TerritoryID
EmployeeID
EmployeeID
TerritoryID
LastName
TerritoryDe
scription
LastName
TerritoryID
TerritoryDe
scription
FirstName
RegionID
FirstName
Title
Title
rritories
Territories
RegionID
www.evacast.net
- M:N 매핑
www.evacast.net
Entity Splitting
Entity Data Model
Relational Data Source
Person
Employees
ID
Name
ID
Name
Type
Type
LoginID
Password
User
ID
LoginID
Password
www.evacast.net
- Entity Splitting
www.evacast.net
Table Per Hierarchy(TPH)
Entity Data Model
Relational Data Source
Person
Person
PersonID
PersonID
LastName
LastName
FirstName
FirstName
HireData is not null
EnrollmentDate is null
HireData is null
EnrollmentDate is not null
HireDate
EnrollmentDate
Instructor
Student
HireDate
EnrollmentDate
www.evacast.net
- Table Per Hierarchy
TPH 활용 방안
www.evacast.net
언제 사용하면 되는가?
• 하나의 테이블에 표현하므로 성능이 빠르다
언제 사용하면 안 되는가?
• 속성이 많은 경우, 빈 공간 낭비가 있을 수 있다
• 하나의 테이블에 표현하므로 Null 값 허용을 해야 한다.
무결성에 영향을 줄 수 있다
www.evacast.net
Table Per Type (TPT)
Entity Data Model
Relational Data Source
Course
Course
CourseID
CourseID
Title
Title
Credits
Credits
DepartmentID
DepartmentID
OnlineCourse
OnsiteCourse
OnlineCourse
OnsiteCourse
URL
Location
CourseID
CourseID
Days
URL
Location
Time
Days
Time
www.evacast.net
- Table Per Type
TPT 활용 방안
www.evacast.net
언제 사용하면 되는가?
• 속성이 많은 경우
• 필드가 무결성 때문에 Null값이 오면 안 되는 경우
언제 사용하면 안 되는가?
• 상속 관계가 복잡한 경우 테이블간 JOIN으로 인하여 성능
이 느릴 수 있다
www.evacast.net