在我的項目中,我需要使用EF並抽象表示層中的查詢。根據我一直在網上閱讀的問題和答案,EF構建了DbSet上的存儲庫模式和DbContext上的工作單元。實體框架 - 無存儲庫抽象
存儲庫模式可以很容易地做到這一點,但我不想重複這個實現,現在混淆了我應該在哪裏初始化或訪問DbContext。它應該在服務層上嗎?
MVC4 API將被用於這個項目,我已經看到在過去的這個工作
在我的項目中,我需要使用EF並抽象表示層中的查詢。根據我一直在網上閱讀的問題和答案,EF構建了DbSet上的存儲庫模式和DbContext上的工作單元。實體框架 - 無存儲庫抽象
存儲庫模式可以很容易地做到這一點,但我不想重複這個實現,現在混淆了我應該在哪裏初始化或訪問DbContext。它應該在服務層上嗎?
MVC4 API將被用於這個項目,我已經看到在過去的這個工作
一種方式是通過爲您的上下文中的接口,以去除基本上一個物理數據庫上的DbContext的依賴則使您的數據訪問代碼從您的服務層(業務邏輯層)。
然而,使用這種方法有一個缺點,那就是你的單元測試(它將使用你的DbContext的僞實現)將使用LINQ to Objects來運行你的查詢,而你的具體實現將會使用不支持所有LINQ to Objects方法的LINQ to Entities。
有MSDN文檔(http://msdn.microsoft.com/en-us/library/bb738550.aspx),它強調了這些差異。
我也推薦閱讀這篇文章(http://kearon.blogspot.com.au/2011/02/mocking-entity-framework-4-code-first.html),它演示瞭如何使DbContext單元可測試消除對財務數據庫的依賴依賴。
希望這一切都有幫助!
謝謝你的回答。如果我理解正確,我將從服務層訪問DbContext?這樣做可以嗎?那麼對於劣勢部分,我想我必須在那裏做一個整合測試 – gnaungayan
是的,它絕對沒問題;這樣做會有效地消除對底層數據存儲的依賴。而集成測試肯定會使不兼容性浮出水面。 – Mark
謝謝梅茲。我認爲這是我正在尋找的答案 – gnaungayan
如果你不想自己的存儲庫層......還有其他地方? –
好吧,這並不是我完全想要抓取存儲庫,我只是不想創建一個類似於其他教程的新存儲庫實現。 IDbSet是否會在這款遊戲中扮演重要角色? – gnaungayan
我認爲DbContext的存儲庫問題存在一些困惑。我正在開發一個WPF - MVVM應用程序,並且我最終沒有使用倉庫,而只是使用內置的dbSet,它運行得很好。我有興趣聽到別人對這個問題的意見。 – GetFuzzy