2014-12-23 8 views
3

이 질문에 후속 조치/
How to make Entity Framework Data Context ReadonlyIQueryable과 DbQuery의 차이점은 무엇입니까?

이 솔루션은 유형의 DbQuery 당신의 DbContext 컬렉션을 만드는 것입니다 대답,하지만 다소 특수한 유형의 (그것이 EF의 네임 스페이스에서 아래로 묻혀)입니다. 이 대

public DbQuery<Customer> Customers 
{ 
    get { return Set<Customer>().AsNoTracking(); } 
} 

:

그럼, 간 기능 차이는이와 DbContext 한의

public IQueryable<Customer> Customers 
{ 
    get { return Set<Customer>().AsNoTracking(); } 
} 

를 ... 그것은 DbQuery 클래스에 올 때 EF 문서는 매우 가볍다 ,하지만 나는 그것을 피하고 싶습니다 그래서 클래스보다는 인터페이스로 구성된 DbContext 데 아이디어를 선호합니다. DbQuery 클래스가 제공하는 추가 이점은 무엇입니까?

답변을 읽고 그냥 내 질문에 조금 바보 깨달았다 코드보고 후 업데이트

. 나는 생각하기도 전에 너무 빨리 물었다! 분명히 기본이되는 구체적인 객체는 DbQuery와 관계 없으므로 실제로 내부 기능은 동일합니다. IQueryable을 사용하는 것이 더 나은 선택이라고 생각됩니다. 양해 해 주셔서 감사합니다.

+0

왜 소스 코드를 읽지 않습니까? 'IDbQuery '에는 더 많은 메소드가 있습니다 ... – Aron

+0

그리고 나서 DbSet이 있습니다. – Triynko

답변

2

DBQuery은 DbContext에 대한 비 일반 LINQ to Entities 쿼리입니다. 이것을 공개하면 엔티티에 대한 LINQ 기능이 제공됩니다. 필요하지 않은 경우 IQueryable 인터페이스 추상화를 사용하십시오.

쿼리 공급자에 의한 구현을 목적으로합니다. 이 인터페이스는 OrderBy, OrderByDescending, ThenBy 또는 ThenByDescending 메서드를 호출하는 정렬 쿼리의 결과를 나타냅니다. CreateQuery가 호출되고 정렬 쿼리를 나타내는 식 트리가 전달되면 IQueryable 개체는 IOrderedQueryable을 구현하는 형식이어야합니다.

IListSource 

데이터 원본에 바인딩 할 수있는 목록을 반환하는 기능을 개체에 제공합니다.

IDbAsyncEnumerable 

요소를 비동기 적으로 검색 할 수있는 비동기 버전의 IEnumerable 인터페이스입니다. 이 인터페이스는 Entity Framework 쿼리와 상호 작용하는 데 사용되며 사용자 지정 클래스로 구현하면 안됩니다.

+0

[*] 비동기 확장 메서드를 사용한다고 가정합니까? 그것들은 유일한 차이점 인 것처럼 보입니다 - 동의합니까? –

+0

문서를 보면 Dbquey가 다른 인터페이스도 구현하고 있음을 알 수 있습니다. 당신이 이들 중 어느 것도 필요로하지 않는다면. 그것을 사용하지 마십시오. 필요한 경우가 아니면 가능한 한 깨끗하게 유지하십시오. – Sievajet

+2

다른 프로젝트에서이 속성을 참조하는 경우 DbQuery를 사용하면 IQueryable이 해당 참조를 요구하지 않고 작동하는 동안 다른 프로젝트에 Entity Framework에 대한 참조가 필요합니다. – Grax