【问题标题】:Best Practices for separation of project layers using ASP.NET MVC3 and Entity Framework使用 ASP.NET MVC3 和实体框架分离项目层的最佳实践
【发布时间】:2012-01-12 03:24:08
【问题描述】:

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

“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 时的最佳实践,管理表示层、业务层和数据层中应该发生什么的最佳经验法则是什么,以及它们是如何分开的?

我知道这涉及到问题...

感谢您的帮助。

【问题讨论】:

标签: asp.net-mvc asp.net-mvc-3 entity-framework entity-framework-4


【解决方案1】:

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

而且我个人认为在“表示”层中使用域对象就可以了,如果您没有构建大型且超级可维护的东西,完全通过 Automapper 左右分离域模型,这完全是过度设计。

【讨论】:

    【解决方案2】:

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

    首先,您的ViewModels 中不应包含复杂类型。复杂的,Entity Framework 的东西,等等。它们应该总是 simplecleanlight。视图不需要任何关于持久性或数据库或诸如此类的知识。视图需要知道的只是它应该呈现什么数据。简单的。

    所以ViewModels 应该是 POCO 的 -> stringsints、基本custom objectsstrongly typed collections

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

    Here is a sample tutorial website 我已经完成了,它向您展示了 the Controller 如何将信息传递给 ViewModel .. 和 ViewModel is really simple

    【讨论】:

      猜你喜欢
      • 2010-09-14
      • 1970-01-01
      • 1970-01-01
      • 2010-11-11
      • 2010-12-25
      • 2012-04-18
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      相关资源
      最近更新 更多