2012-06-18 1 views
2

내가 엔티티 프레임 워크 4n 계층 응용 프로그램에서 Entity Framework (4) 컴파일 된 쿼리를 사용하는 방법? - 하나 개의 서비스 계층 (WCF) - 하나의 비즈니스 층 - 하나 개 DATAACCESS 층 (작업 :

서버 측과 n 계층 응용 프로그램 디자인 문제가, 내 응용 프로그램은 3 개의 층이 있습니다 EF4 포함)

엔티티는 독립 프로젝트/어셈블리에있는 POCO입니다.

비즈니스 개체와 DataAccess 레이어를 만드는 데 Dependency Injection을 사용하고 있으므로 인터페이스에서만 작동하며 비즈니스 계층의 EF에 대한 종속성이 없습니다.

퍼포먼스 향상을 위해 EF Compiled Queries를 사용하고 싶습니다.

그러나 내 아키텍처에서 DataAccess는 CRUD 메소드만을 제공하므로 내 (비즈니스) 쿼리는 비즈니스 계층에 정의됩니다.

그래서 비즈니스 계층에서 컴파일 된 쿼리를 정의해야하지만 EF에 종속성이 없으며 느슨한 결합을 유지하고 싶지 않으므로 ObjectContext를 호출 할 수 없습니다.

DataAccess에서 쿼리를 정의하는 것이 내 응용 프로그램 설계와 맞지 않습니다.

그래서 비즈니스 계층의 비즈니스 쿼리를 DataAccess 계층에 주입하는 일반적인 방법이 있다면 누구나 알고 있으므로 컴파일 된 쿼리와 함께 사용할 수 있습니까?

나는 많은 것들을 시도하고 모든 곳에서보고,이에 대한 답을 찾을 수 없습니다 ... :(EF는 n 계층 응용 프로그램의 종류와 잘 맞지 않는 것 같습니다.

답변

0

컴파일했습니다 쿼리는 데이터 액세스 클래스에 종속적 인 데이터 액세스 특정 기능이기 때문에 쿼리는 데이터 액세스 클래스에 속합니다. 설계가이를 수용하지 않으면 단순히 데이터 액세스 준비가되지 않았습니다. 특정 기능 = 디자인을 변경하거나 데이터 액세스를 사용하지 않습니다. 기능.

가장 간단한 방법은 복잡한 쿼리를 컨텍스트에 추가하고 해당 컨텍스트의 메서드로 노출하는 것입니다.

public IQueryable<SomeEntity> SomeQuery(string someParam) { 
    return compiledQuery.Invoke(this, someParam); 
} 

이제 이러한 메소드를 컨텍스트의 인터페이스에 추가합니다.

비슷한 접근 방식으로 비즈니스 계층에 표시되는 모든 데이터 액세스 인터페이스에서 컴파일 된 쿼리를 노출 할 수 있습니다.

+0

고맙습니다. 그게 내가 읽고 싶지 않았지만 ... – PAP