0

我有一個包含MVC3 Web應用程序和包含實體框架文件的數據項目的解決方案。我有Entity Framework工作,但是當我嘗試將Entity Framework實體項目對象包含到我的某個視圖模型中以傳遞給視圖時,出現以下錯誤使用ASP.NET MVC3和實體框架分離項目層的最佳實踐

類型'System.Data。 Objects.DataClasses.EntityObject'是在未引用的程序集中定義的。您必須添加對程序集「System.Data.Entity,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089」的引用。

我試着添加對該程序集的引用,然後在項目中使用using語句包含它,但它似乎沒有做任何事情。但是,有這個問題也是乞討的問題:嘗試在視圖模型中使用Entity Framework實體項目是不是一個好主意?根據使用ASP.NET MVC3和Entity Framework的最佳實踐,控制表達層,業務層和數據層應該發生什麼的最佳經驗規則是什麼,以及它們是如何分開的?

我知道這是涉及的問題...

感謝您的幫助。

+0

在什麼時候應用程序會給你這個錯誤? –

+0

您應該閱讀Tom Dykstra的優秀EF/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 – RickAndMSFT

回答

6

好的。這是我對事物的看法...

首先,你的ViewModels不應該包含複雜的類型。複雜,被Entity Framework東西等,他們應該始終是簡單乾淨。該視圖不需要具有關於持久性或數據庫或任何知識的任何知識。所有視圖都需要知道它應該呈現哪些數據。簡單。

所以ViewModels應該是POCO的 - >strings,ints,基本custom objectsstrongly typed collections

在您的控制器中,您應該將任何複雜類型轉換爲查看模型。我建議使用AutoMapper

Here is a sample tutorial website我已經完成了向您顯示the Controller如何將信息傳遞給ViewModel ..和ViewModel is really simple

0

由於您的域對象從EntityObject繼承,所以您得到此錯誤,因此它們不是持久性 - 無知。如果您希望它們不依賴實體框架庫,則需要首先使用POCO生成模板或EF代碼。

我個人認爲,在你的「表現層」中使用你的域對象是很好的,如果你沒有構建一個巨大且超級可靠的東西,完全由Automapper分離域模型,那麼就是完全過度。