Asp.net mvc 使用ASP.NET MVC3和实体框架分离项目层的最佳实践

Asp.net mvc 使用ASP.NET MVC3和实体框架分离项目层的最佳实践,asp.net-mvc,asp.net-mvc-3,entity-framework,entity-framework-4,Asp.net Mvc,Asp.net Mvc 3,Entity Framework,Entity Framework 4,我有一个包含MVC3 web应用程序的解决方案和一个包含实体框架文件的数据项目。我已经让实体框架工作了,但是当我试图将实体框架实体项对象包含到我的一个视图模型中以传递给视图时,我得到了以下错误 类型“System.Data.Objects.DataClasses.EntityObject”是在未引用的程序集中定义的。必须添加对程序集“System.Data.Entity,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089

我有一个包含MVC3 web应用程序的解决方案和一个包含实体框架文件的数据项目。我已经让实体框架工作了,但是当我试图将实体框架实体项对象包含到我的一个视图模型中以传递给视图时,我得到了以下错误

类型“System.Data.Objects.DataClasses.EntityObject”是在未引用的程序集中定义的。必须添加对程序集“System.Data.Entity,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”的引用

我试图添加对该程序集的引用,然后将其包含在项目中的using语句中,但它似乎没有做任何事情。但有了这个问题也就引出了一个问题:在视图模型中尝试使用实体框架实体项难道不是一个好主意吗?根据使用ASP.NET MVC3和Entity Framework时的最佳实践,管理表示层、业务层和数据层中应该发生的事情的最佳经验法则是什么,以及它们是如何分开的

我知道这涉及到一个问题


谢谢您的帮助。

您会遇到此错误,因为您的域对象继承自EntityObject,因此它们不是持久性对象。若希望POCO生成模板或EF代码不依赖于实体框架库,则需要首先使用POCO生成模板或EF代码


就我个人而言,我认为在“表示”层中使用域对象是很好的,如果您不构建大型且超级可维护的对象,那么完全使用Automapper之类的工具来分离域模型就太过分了。

您会遇到这个错误,因为您的域对象继承自EntityObject,因此,他们并非无知。若希望POCO生成模板或EF代码不依赖于实体框架库,则需要首先使用POCO生成模板或EF代码


就我个人而言,我认为在“表示”层中使用域对象是很好的,如果您不构建大型且超级可维护的对象,完全用Automapper之类的工具来分离域模型,那就太过分了。

好的。这是我对事物的看法

首先,您的
ViewModels
不应该包含复杂类型。复杂,是
实体框架
之类的东西。它们应该总是简单、干净、轻巧。视图不需要任何关于持久性、数据库等的知识。视图需要知道的只是它应该呈现什么数据。简单

因此,
视图模型
应该是POCO的->
字符串
整数
,基本的
自定义对象
强类型集合

在控制器中,应将任何复杂类型转换为视图模型。我建议为此使用
AutoMapper


我已经完成了,它向您展示了如何将信息传递到ViewModel。。还有。

好的。这是我对事物的看法

首先,您的
ViewModels
不应该包含复杂类型。复杂,是
实体框架
之类的东西。它们应该总是简单、干净、轻巧。视图不需要任何关于持久性、数据库等的知识。视图需要知道的只是它应该呈现什么数据。简单

因此,
视图模型
应该是POCO的->
字符串
整数
,基本的
自定义对象
强类型集合

在控制器中,应将任何复杂类型转换为视图模型。我建议为此使用
AutoMapper


我已经完成了,它向您展示了如何将信息传递到ViewModel。。以及。

应用程序在什么情况下会出现此错误?您应该阅读Tom Dykstra的优秀EF/MVC教程。应用程序在什么情况下会出现这种错误?您应该阅读Tom Dykstra的优秀EF/MVC教程。