2011-12-03 93 views
3

我是WPF/MVVM/Entity Framework的新手,它有很多概念要同時處理。 我創建了一個只有一個主視圖的WPF應用程序,它分爲2個部分:1個UserControl用於我的數據的主視圖,另一個用於詳細視圖的userControl。所有數據都存儲在通過實體框架實體模型生成的數據庫中。我使用了MVVM light:databinding,commands,eventToCommand ...我在一個VS項目中使用了以下架構:1個視圖文件夾,1個ViewModels,1個實體組件定義。我試圖更新一個實體時,我遇到異常告訴我,我不能更新,因爲我試圖更新一個對象鏈接到一個ObjectContext(聲明在MasterViewModel中)與另一個對象(在DetailedViewModel中聲明)如何在ViewModels之間正確共享實體框架ContextObject?

如何在ViewModels之間共享EF ObjectContext?我閱讀了一些關於存儲庫或UnitOfWork的內容,但是我沒有真正瞭解如何在我的案例中使用它。

子公司問題:使用EF和n層應用程序訪問實體的最佳做法是什麼?存儲庫是答案嗎?考慮到類已經存在的事實,我應該在解決方案架構中有一個「Model」文件夾嗎?

+0

你忘了,你可以找到Repository模式和檢組的工作here的解釋接受下面的答案(這會提升你的聲譽),還是你正在尋找另一種解釋? :) – Rachael

回答

5

答案在於你提到的兩種設計模式。

存儲庫是一種設計模式,可幫助您爲數據創建單個訪問點。例如,CustomerRepository具有GetById(int customerId),Update(Customer customer),Update(Customer customer),Delete(Customer customer)Add(Customer customer)等功能,並且根據您實施該模式的具體特點,還可以使用其他更具體的功能來處理涉及客戶的數據。

在常規應用程序中,您將擁有幾個存儲庫,可以讓您訪問不同類型的數據。在一個商業功能中,您可以使用其中一些存儲庫來構建功能。

然後UnitOfWork模式出現了,因爲這可以幫助您對一組相關操作進行分組。工作單元會跟蹤更改,直到您將它們保存到數據庫中作爲一個整體。 (EF中的ObjectContext是UoW模式的實現)

在您的示例中,顯示主表單,然後加載和更新其中一個項目的詳細信息,這是一組您希望一起更新的相關操作。

這意味着您應該爲master和details視圖使用一個UoW。

This是不錯的文章,它展示了使用EF時Repository和UoW模式實現的基本方式。

Here(如果您想了解更多的從企業應用程序,一個真正好的書模式的引用都)

+0

你好Wouter,非常感謝您的回答。我會嘗試你給我的每一首歌,並會在需要時提出補充性問題。 再次感謝! –

+0

你好,我實現了Repos和UnitOfWork,例如[Wouters友好的例子](http://blogs.msdn.com/b/adonet/archive/2009/06/16/using-repository-and-unit-of -work圖案與 - 實體框架-4-0.aspx)。 –

+0

另請參閱http://ef4templates.codeplex.com/,它有一個t4生成器來生成您的存儲庫以及您的.edmx文件中以這種方式使用的所有數據模型。 –

相關問題