2010-07-28 4 views
6

EF와 형식화 된 데이터 집합의 유용성을 비교하고 있습니다. EF가 SQL Server에만 바인딩 된 경우 형식화 된 데이터 집합보다 EF를 사용하는 이유를 알기 위해 실패했습니다. 그러나 EF에서 Linq에 문을 존경 늦은 평가된다는 사실을 사실 당신은 같은 한 경우 :누군가 Entity Framework와 형식화 된 데이터 집합 간의 주요 차이점을 명확히 할 수 있습니까?

select * from Customers where Name = 'John smith' 

그러나와 형식화 된 데이터 세트 :

db.Customers.where(c => c.Name == "John Smith") 

을 같은 쿼리를 구축 할 것 EF 매우 유사하다

bll.GetCustomers().where(c => c.Name == "John Smith") 

을하지만, 차이점은 첫번째 실행이다 : 당신은 쓸 수

select * from Customers 

그런 다음 표준 콜렉션 라이브러리를 사용하여 이름이 "John Smith"인 행을 찾습니다. 이론적으로는 EF가 더 효율적일 것입니다.

이 정보가 맞습니까?

+0

즉시 명백하지 않을 수도있는 점을 보여주는 좋은 간단한 질문입니다. –

+0

EF - 좋은 형식화 된 데이터 집합 - Blaaaaah. – zmbq

답변

4

예. Entity Framework에서는 IQueryable<T>을 사용하여 쿼리를 구성합니다. 이렇게함으로써 :

var results = db.Customers.Where(c => c.Name == "John Smith"); 

을 내부적으로, 결과는 IQueryable<Customer> (또는 유형)입니다. 이를 통해 공급자 (EF)는 내부적으로 실행되는 방법을 최적화 할 수 있습니다. SQL Server의 경우 서버로 보내지는 실제 쿼리에는 SQL WHERE 절이 이미 있습니다. 그러면 데이터베이스에서 단일 레코드 ("Name"이 고유 한 경우) 만 반환합니다. 모든 기록의.

입력 된 데이터 세트를 사용하면 모든 레코드를 반환 한 다음 나중에 해당 이름에 대한 결과를 검색 할 수 있습니다. 이것은 잠재적으로 훨씬 덜 효율적입니다.

+0

좋아, 이것은 내가 찾고있는 종류의 대답이었습니다 :) 이제 EF를 내 데이터 액세스 레이어로 사용할지 아니면 다른 레이어로 추상화할지 여부를 결정하려면 ... 내 비즈니스 로직 계층에서 Linq를 사용합니다. (하지만 나중에이 질문이 올 것입니다.) 감사! –

2

맞습니다. Entity Framework는 ORM (Object-Relational Mapper)입니다. 쿼리를 위해 관계형 데이터에 개체를 매핑하는 방법을 제공합니다. IQueryable<T>은 EF와 함께 사용되며 기본적으로 서버와주고받는 SQL을 최적화 할 수 있습니다.

1

아니요, 정확하지 않습니다. 형식화 된 데이터 집합을 사용하면 'SELECT * from Customers where name = @name'과 같이 매개 변수 쿼리를 테이블 어댑터에 추가 할 수 있습니다. 런타임시 코드에서 name 매개 변수를 제공합니다. 그렇게하면 원하는 데이터 만 데이터 세트로 가져올 수 있습니다. Reed의 답변에 따라 전체 테이블을 먼저 가져 오는 것은 어떤 크기의 데이터베이스에서도 기껏해야 비효율적이며 현실적이지 않을 것입니다. 이것은 ADO.Net의 일반적인 오해 인 것 같습니다. 일부 책, 특히 Entity Framework에 관한 책에서도 계속 이어졌습니다!

관련 문제