2010-01-02 71 views
12

我想使用EF和MVVM,並試圖看看它們是如何融合在一起的。我無法找到很多示例,希望你們能回答幾個問題。如何讓實體框架和MVVM一起玩好?

假設我在一個名爲Customer的數據庫中有一個表。我運行EF設計器並獲取數據模型。

下一步是運行一些linq從數據模型中獲取數據。讓我們創建一個名爲CustomerRepository的新類來完成此操作。

現在我猜測模型會調用CustomerRepository.GetCustomers獲取客戶列表。

這是我的問題 - CustomerModel有一個由EF在數據模型中定義的客戶對象列表。我如何添加驗證屬性或任何類型的驗證?

EF和MVVM之間似乎有一點斷開。我相信你們之前有些人曾經打過這個 - 有什麼想法?任何更好的方法來解決這個問題?

乾杯

史蒂夫

回答

4

驗證,業務規則,您的客戶對象應該活在視圖模型,將作爲一個控制器或演示您查看的演示文稿。

在如何創建視圖模型方面,你有兩個選擇:

  1. 包括模型作爲虛擬機的屬性和模型實例傳遞到虛擬機的構造。然後,您可以公開客戶的屬性,並將它們連接到底層模型的相應屬性。
  2. 使用T4模板和反射(或最好是Introspection)生成一個ViewModel來'讀'模型,並生成將直接映射到它的屬性。

現在你可以添加自定義的驗證規則給VM,這樣當相應的命令是從視圖發送,您可以執行業務規則,並在適當時可以使用EF的API堅持這些變化更新模型回數據庫...

+2

有趣。我一直認爲像性別角色這樣的模型特定驗證應該在模型中,但是在更高層次上進行驗證 - 涉及多個屬性或其他對象的應該在視圖模型中。 我想要做的一件主要事情是避免重複表面多次客戶屬性。它是在數據模型中爲我自動定義的,所以不得不在模型中重新進行連接,然後在虛擬機中重新連線,看起來像是在數據庫更改時爲自己工作。反思看起來很有趣。 – 2010-01-02 20:03:14