ASP.NET MVC:将DTO / EditModel导入数据库的最佳实践或设计模式

时间:2010-11-12 00:19:30

标签: asp.net-mvc design-patterns dto

我正在使用AutoMapper为ViewModel和EditModel创建DTO。我找不到如何获取EditModel并将其包含的更改应用于数据库的一个很好的示例。

我首先考虑使用AutoMapper作为双向机制,但显然不建议这样做:http://www.lostechies.com/blogs/jimmy_bogard/archive/2009/09/17/the-case-for-two-way-mapping-in-automapper.aspx

那么,从控制器到数据存储获取DTO或EditModel的最佳方式(设计模式)是什么?

更新:基于一些答案,我应该提到我确实使用了存储库设计模式和实体框架。

更新:我的问题过于主观,因为没有一般做法可以做到这一点。我的结论是很多人都使用AutoMapper,即使其他人不推荐它也是如此。

4 个答案:

答案 0 :(得分:1)

以最简单的形式,您只需使用AutoMapper将您的模型映射到您的域/ DTO对象,然后将其保存到您的数据存储区,但是您可以这样做。

所以我完成的项目之一就是其中之一:

Mapper.Map(modelObject, domainObject);
domainObject.Save();
return domainObject.Id;

您可能希望从您调用此方法的任何方法中返回id,以便您可以进一步使用它。这只是一个粗略的例子,但这是它的基础......

修改 以下行:Mapper.Map将ViewModel数据放入Domain对象。从那里,Save()会调用您需要的任何内容。在您的情况下,它将是您的IRepository.Save()方法。对我来说,这会调用nHibernate的SaveOrUpdate

在我的AutoMapper配置中,我有一些东西:

Mapper.CreateMap<OrderDomain, OrderViewDTO>();

Mapper.CreateMap<OrderSaveDTO, OrderDomain>();

这有帮助吗?

答案 1 :(得分:0)

您的问题可能会有很多可能的答案,这里列出的内容太多了。那就是说 - 我认为你想要研究的东西叫做ORM或对象关系映射器。一些更常见的选项是NHibernate和Entity Framework。这将允许您在应用程序中获取对象并将它们映射到您的数据库。

AutoMapper是一个很棒的工具 - 但我相信其目的是在对象之间进行映射(如视图模型和实体)。

编辑:感觉你的问题询问设计模式,我建议调查一下Repository模式 - 它适用于ASP.NET MVC,并且有很多例子。

答案 2 :(得分:0)

我使用AutoMapper来实现两个方向。您只需要确保在映射时自己处理任何集合。 AutoMapper可以很好地平整一个结构,但不能很好地重构它。

答案 3 :(得分:-2)

NHibernate是将DTO映射到数据库表的最佳方式。实体框架尚未准备好迎接黄金时段,就像ASP.NET MVC一样。使用NHibernate的Web表单是最好的方法。