2012-03-24 46 views
0

我已經使用EF 4.0使用存儲庫模式在MVC3中構建了一個站點。一切都很順利,但我開始遇到很多「兩個對象之間的關係無法定義,因爲它們附加到不同的ObjectContext對象」錯誤。看起來,我的存儲庫層讓所有的上下文都混在一起,所以我認爲啓動一個新的EF4.1項目可能會更容易一些。實體框架4.1 - 瘋狂的選項數量

起初我考察了Repository Pattern +工作單元,但發現有些線程表示EF4.1並不需要這個。我遇到this線程說「DbContext是工作單元模式的實現,IDbSet是存儲庫模式的實現」。我想,也許那時我可以使用它。經過進一步的檢查,儘管DbContext似乎使用了Code First方法,但據我所知,如果POCO發生變化,我會再次刪除並重新創建數據庫。我需要將數據保存在我的數據庫中,所以據我所知可以選擇。

我的腦袋現在旋轉EF選項。 EF4.1需要存儲庫模式嗎? DbContext是否適用於已經充滿數據的數據庫?有沒有更好的方法來管理不涉及這些的實體上下文?

任何推向正確的方向將是偉大的=/

回答

1

一些評論。有關詳情,我建議使用搜索引擎進行一些基礎研究。

...我開始碰到很多的「兩個 對象之間的關係,不能被定義,因爲它們連接到不同的 ObjectContext的對象」的錯誤。看起來我的存儲庫層是 ,所有混淆的上下文,所以我覺得它可能只是 更容易啓動一個新的EF4.1項目。

如果你有這個錯誤,你做錯了什麼。 EF 4.1不會保護您再次犯同樣的錯誤,因爲您也無法更改連接到不同DbContext的對象之間的關係。您只需分析和調試您的代碼並找出問題的根源。

...此線程說「DbContext是工作單元的實現 模式,IDbSet是存儲庫模式的實現」。我 想也許那我可以只使用...

ObjectContextObjectSet<T>是這些模式的實現,以及。這不是更改實體框架版本的理由。

經過進一步的檢查雖然看似的DbContext,使用代碼 優先的方法...

您還可以使用數據庫優先和模型優先的做法與DbContext

...這,據我可以告訴就會下降,並重新創建數據庫 如果波蘇斯變化。我需要將數據保存在我的數據庫中,因此我至少可以告訴 這個選項已經結束。

您可以關閉該功能。此外,EF 4.3具有遷移功能,可幫助更新和演進現有數據庫模式。

EF4.1需要存儲庫模式嗎?

不,對於ObjectContext也不需要。確切地說,您不需要編寫自己的(抽象)EF頂層存儲庫,因爲EF已經是該模式的實現。

DbContext是否適用於已經裝滿 數據的數據庫?

是的。從代碼(Code-First)創建數據庫的附加功能主要是用於應用程序開發階段的生產力工具,該工具應該在生產中被禁用。

+0

有趣。看起來像4.1會給我提出同樣的問題,所以我可能最好,正如你所說,只是解決當前的問題。很多好用的指針雖然使用,歡呼! – boolean 2012-03-24 23:04:16

+0

@boolean:BTW,當前版本'DbContext'/Code First是EF 4.3.1。如果您考慮升級,請直接轉到該版本。 – Slauma 2012-03-24 23:08:48