9

看來,最有MVC3和EF4.1的重點是圍繞「代碼優先」 - 我似乎無法找到任何例子或者滿足以下條件教程:MVC3和EF數據優先:什麼是最佳實踐?

  • 使用現有SQLServer數據庫
  • 有網絡&數據訪問獨立的項目(我們有多個網絡應用程序共享同一數據訪問類)
  • 建議進行驗證

難道這樣的例子或教程存在?是否有任何文件記錄的「最佳實踐」如何實現這一目標,或者沒有以這種方式構建解決方案的理由?

回答

5

這是很常見的情況,它取決於您是否想要使用EDMX文件進行映射,或者是否想要在代碼中定義映射(如代碼優先)。

這兩種情況都可以做到數據庫第一

  • 您將在Visual Studio中的EF工具,加強對現有數據庫中創建EDMX,你會使用的DbContext T4生成模板獲得POCO類和的DbContext派生類
  • 你將下載EF Power Tools CTP,你會使用它的逆向工程功能生成代碼映射,POCO類和背景,你

這兩種方法都不將增加數據annotatio的納秒。實體上的數據註釋不應該用於客戶端驗證(這是不好的做法),除非您正在執行非常簡單的應用程序。通常情況下,您的觀點具有更高級的期望,因此對實體的驗證可能會有所不同。例如,插入視圖和更新視圖可能需要不同的驗證,並且不可能在實體上使用單個數據註釋集執行它。因此,您應該將數據註釋驗證轉移到專門的視圖模型,並將您的實體轉換爲查看模型,反之亦然(您可以使用AutoMapper來簡化此操作)。

無論如何,它是possible to add data annotations to generated classes通過好友類,但如上所述,這不是一個好的做法。

+0

對實體數據註釋都同意和不同意。對於簡單的約束如長度和可空性,我認爲對實體類的數據註釋是可以接受的。否則,您已經創建了一個反模式的貧血域模型(http://martinfowler.com/bliki/AnemicDomainModel.html)。一致認爲,視圖模型具有更復雜的業務場景,並且應該會/會有更復雜的驗證要求。 – Jeff

+0

是Web項目的edmx部分,還是在其自己的類庫中?我已經更新了該問題以刪除註釋進行驗證,因爲我想避免貧血域模型。 – chris

+0

我會使用一個單獨的類庫。 – Jeff