asp.net mvc 模型与实体框架模型

Posted

技术标签:

【中文标题】asp.net mvc 模型与实体框架模型【英文标题】:asp.net mvc models vs entity framework models 【发布时间】:2011-07-22 00:02:34 【问题描述】:

在您的 asp.net mvc - model 文件夹中创建模型是否是最佳实践。 将这些模型与您的视图一起使用,并使用服务层将我的模型“调整”到 EF 模型。

或者您是否使用了其他方法。这种方法的问题在于,大多数时候我的(自制)模型是 EF 模型的副本(不是干的)

所以有人可以解释一下你的视图使用什么模型,因为它变得非常混乱。模型/视图模型/实体框架模型 ....

解决方案:

感谢大家的回答,我现在正在重构一些东西!

【问题讨论】:

【参考方案1】:

正确的方法是对 ViewModel 使用不同的类,对持久性(实体)使用不同的类。通常的原因是您经常需要向视图发送一些额外的数据(例如填充下拉列表的数据、禁用某些字段的数据等)、使用不同的验证或仅显示实体的子集。

我不是纯粹主义者。如果我看到我的视图模型与我直接使用实体的实体完全相同,但是一旦我需要视图中的任何其他信息,我将重构代码。由于增量开发,我通常从实体开始,以视图模型结束。

【讨论】:

在遵循此模式时,您会推荐哪种命名约定? MVC 教程告诉您只需使用“模型”文件夹,将您的实体框架模型粘贴在其中,并假设它们与您的视图模型相同(我们知道,通常情况并非如此)。【参考方案2】:

通常我的 View Models 在 Models 文件夹中,我的 Domain Models 在 ORM 层中。

查看模型(顾名思义)是那些您只需要帮助查看过程的对象的普通模型,它们没有任何持久性,它们可能包含一些逻辑.

如果您遇到领域模型与视图模型匹配的问题,那么您可能需要重新设计模型,或者只使用领域模型而无需中间人。

【讨论】:

【参考方案3】:

就我而言,我更喜欢删除标准 MVC 结构中的 Models 文件夹,并添加 ViewModels 文件夹来存储所有视图模型。正如 Ladislav 在第一次迭代中提到的那样,这些视图模型可能是您的域模型中实体的精确副本,但它们会逐渐增长并且会有很大差异。

【讨论】:

文件夹viewModels而不是models有什么意义? 无。但是通过这种方式,您会看到“视图”模型对象保存在那里,而不是“业务”模型对象。这一切都取决于个人喜好:) 我明白了,现在说得通了。感谢您的回复。【参考方案4】:

好吧,这没有意义。我曾经为此苦苦挣扎,我认为您需要有不是表实体的模型,我称之为域模型。原因是有时如果您使用的是linq2sql,那么您必须处理桥接/链接表(这不是真正的实体)和复杂的计算,所以您无法在表实体中进行处理,对吧?所以我的方法是让 ViewModel Model Entity

【讨论】:

以上是关于asp.net mvc 模型与实体框架模型的主要内容,如果未能解决你的问题,请参考以下文章

转Asp.Net MVC4.0 官方教程 入门指南之八--为Movie模型和库表添加字段

ASP.NET MVC 选中ADO.NET 实体数据模型后 点击添加就跳出以下图片,求大神帮帮忙!!!谢谢

Asp.net Mvc post表单提交多个实体模型

ASP.NET MVC 项目中 ADO.NET 实体模型的已打开 DataReader

ASP.NET MVC3 和实体框架代码优先架构

在 ASP.NET MVC 5 中搭建外部模型