我正在使用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,即使其他人不推荐它也是如此。
答案 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表单是最好的方法。