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 实体数据模型后 点击添加就跳出以下图片,求大神帮帮忙!!!谢谢