我有一個項目結構如下: .Persistence - >內的.repo - >。服務 - > .Controllers - > MVC3應用。EF4:爲什麼啓用延遲加載時必須啓用代理創建?
每層具有與接口的相應的組件和有也有一些其他組件等.Entities,.ViewModels,和共同的代碼組件。
持久性 - 這包含EF4 datacontext(代碼優先)和對EF4.3的引用。有一個工廠用於創建稱爲GetContext()的Context,並且該工廠實現了IDisposable。這不是一個單身人士的原因,我認爲這是Windsor對LifestyleSingleton()所做的一切。
回購 - 這適用實施庫和規範圖案(http://huyrua.wordpress.com/2010/07/13/entity-framework-4-poco-repository-and-specification-pattern/)庫。啓用時延遲加載
1.爲什麼代理的創建已啓用:
其它層是不言自明......
問題?
2.如果我想設置惰性加載=假,我可以投我在服務層的IEnumerable到的ObjectQuery才能使用.INCLUDE()呢?
謝謝。我同意你關於不在服務層使用include的問題。 至於使用DbQuery不是ObjectQuery,你知道爲什麼DbQuery沒有。哪裏(字符串)重載,如「it.ID> 2」接收實體sql值?此外,我想不必在我的回購項目中引用EntityFramework(大約2mb),所以如果我使用System.Data.Entity命名空間(框架的一部分)中的ObjectQuery,我可以避免這樣做...使用ObjectQuery而不是DbQuery有什麼不利嗎? – diegohb 2012-03-01 00:19:30
@diegohb:實體SQL ist不支持'DbContext',這就是爲什麼沒有字符串重載'Where'。如果你想使用ObjectQuery,你可以使用'IObjectContextAdapter'(你知道嗎?)從'DbContext'中取出ObjectContext。但除非你真的想要使用實體SQL,否則我建議堅持使用'DbContext'並且引用EntityFramework.dll。否則根本沒有理由使用'DbContext',那麼你可以使用EF 4.0。 – Slauma 2012-03-01 11:03:51
謝謝!是的,我知道關於objectcontextadapter。我的用戶界面使用jqGrid組件,它提供過濾功能,我打算將過濾參數轉換爲字符串查詢以傳遞給我的服務人員,他們顯然需要將其傳遞給repo(可以訪問ObjectContextAdapter和DbContext)爲了使用ESQL Where overload ...我真的不想在我的UI中爲EntityFramework.dll做一個硬引用,只是爲了使用這一個重載,而我更願意堅持使用DbContext。如果你看過huyrua的鏈接,我將需要重載所有的GenericRepo方法。 – diegohb 2012-03-01 13:47:09