2012-02-15 64 views
0

我是新來的MVC開發應用程序的方式,大部分是享受。我有點困惑的一件事是使用實體框架。 EF通常(至少以我的經驗)通過.edmx表定義多個表和關係。幾個問題:MVC中的實體框架和類模型

  • 我爲什麼要定義一個單獨的類文件,如果EF正在建設,所有我需要在後臺類的特定表?

  • 從我見過的一些驗證方法中,他們想要定義與表格模型相關的類中的驗證邏輯。如果我使用EF,我是否會有一個描述模型的.cs文件和一個描述同一個表的.edmx(除了它的關聯表)?

  • 如果是,那麼如何將.cs文件連接到.edmx定義,以便CRUD輕鬆地從EF中流動?

很抱歉,如果這些看似簡單的問題,但我只是試圖讓我的頭纏着這些基本概念。在那裏太多的例子只使用一張表,在我的業務中,我永遠不會寫一個使用單個表的應用程序。總是有多個表與外鍵相互關聯。感謝您的及時回覆。

回答

0

好問題,Darryl。這裏是我的迴應你的要點:

  • 定義匹配的EF創建數據模型獨立的模型類,一般從業務模型對象分離數據訪問「東西」的簡單起見個好主意這將在整個應用程序中使用。有些人不喜歡這種方法,因爲它涉及到將實體映射到POCO時會產生一些開銷,但如果使用諸如AutoMapper之類的工具,則開銷很小。好處在於你在你和你的(可能)不斷髮展的數據模型之間創建了一個分離層。

  • 你可以在夥伴類中定義驗證邏輯(只是一個部分類,它位於你的實體旁邊),但這意味着你將在整個應用程序中使用該實體,有些人會辯論那不是最好的主意。如上所述,另一種方法是創建您自己的POCO來鏡像EF創建的實體並將驗證屬性放置在POCO上。

  • 我在前面的項目中提到了這一點,但要做到這一點的方法是定義好友類。給EF好友上課一個谷歌,你應該找到很多關於如何做到這一點的例子。

只需添加到這一切,如果你選擇創建一個鏡像您的EF實體,如AutoMapper工具可以處理相當複雜的關係,當談到映射類POCO類。因此,如果您的數據模型中有外鍵關係,AutoMapper可以理解並相應地映射您的POCO類(例如:您有一個具有一對多關係的實體和一個包含對象列表的POCO來鏡像關係)。

我希望有一些幫助...

+0

非常感謝安東尼。我非常感謝你的見解,我會檢查出Automapper。我會懷疑有好友班,讓我把業務邏輯在這些類中該意見可能會再打電話,我真的很渴望做他見我有很多我的觀點重複邏輯的(一個明確的禁忌),其可以通過variuos模型中的方法輕鬆處理。 怎樣一個鏈接好友欣賞到EF的CRUD? – 2012-02-15 21:51:34

+0

現在好了,我想你說的方程約雙方在這裏...如果你已經在你的意見重複的邏輯,你會希望尋找到使自己的HTML輔助。你可以看看斯科特谷的帖子在這裏:斯科特谷的網站(http://weblogs.asp.net/scottgu/archive/2011/05/12/asp-net-mvc-3-and-the-helper -syntax中之razor.aspx)。就實體而言,您可以將業務邏輯放在這些好友類中;不過,我建議您將業務邏輯分解到應用程序體系結構中的自己的層中。 – Anthony 2012-02-15 22:08:27

+0

這樣想吧......你調用一個控制器,你的控制器(通過任何方式)將實例化一個「業務邏輯處理器」對象。這個對象可以容納任何需要處理數據訪問的倉庫。 – Anthony 2012-02-15 22:10:22

2

對於一個教程,顯示了使用部分類的 - 在Web窗體應用程序,但對於MVC同樣的技術將被用於 - 見將元數據添加到數據模型在這個教程:

http://www.asp.net/web-forms/tutorials/getting-started-with-ef/the-entity-framework-and-aspnet-getting-started-part-8

從您的評論的「EF通常(至少在我的經驗)通過的.edmx表定義多個表和關係。」聽起來你只熟悉Database First和Model First--對Code First的介紹和差異的解釋,後面跟着一系列使用Code First的MVC示例的教程,請參閱本教程:

http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application