2012-06-18 28 views
2

我有一個N層應用程序設計問題與實體框架4.如何在n層分層應用程序中使用實體框架(4)編譯查詢?

服務器端,我的應用程序有3層: - 一個服務層(WCF) - 一個業務層 - 一個數據訪問層(工作與EF4)

實體是POCO,放置在一個獨立的項目/大會。

我使用依賴注入來創建業務對象和DataAccess圖層,因此我只使用接口,並且在業務層對EF沒有依賴性。

我想使用EF編譯查詢來提高性能。

但是我的業務查詢是在業務層中定義的,因爲在我的架構中,DataAccess只提供CRUD方法。

所以編譯後的查詢應該在業務層中定義,但是我對EF沒有依賴性,也不希望有一個保持鬆耦合,因此我不能從那裏調用ObjectContext。

而在DataAccess中定義查詢並不適合我的應用程序設計。

那麼有誰知道是否有一種通用的方法將業務查詢從業務層注入到DataAccess層,以便我可以將它們用於編譯查詢?

我試過很多東西,到處看,並不能找到答案,這... :(看起來像EF不那種N層應用程序的吻合。

回答

0

編譯查詢屬於數據訪問層,因爲它是依賴於數據訪問類的數據訪問特定功能如果您的設計不接受此功能,那麼它根本沒有準備好訪問數據訪問特定功能=要麼更改您的設計,要麼不要使用特定數據訪問特徵

最簡單的方法是將複合查詢添加到上下文中,並將它們作爲上下文中的方法公開:

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

現在您將這些方法添加到上下文的接口中。

您可以遵循類似的方法,並在業務層中可見的任何數據訪問接口上公開編譯查詢。

+0

thanx,這就是我不想讀的,但知道我會... :) – PAP