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

3
我正在使用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个回答

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>();

这有帮助吗?


谢谢您的反馈 - 我所问的正是如此,您如何建议将数据从DTO持久化到数据存储区 - Remus
回答中添加了更多内容。如果这样更清晰,请告诉我。 - CubanX
1
此外,在您发布的博客中,他谈到了为什么不会在AutoMapper中实现双向映射。他并不是说您不能有两个映射,一个从您的领域到显示数据的DTO,另一个从DTO到保存数据的领域。 - CubanX

0

对于你的问题,可能会有很多可能的答案,太多了无法在此列出。话虽如此 - 我认为你想要研究的下一个东西叫做ORM或对象关系映射器。一些更常见的选项是NHibernate和Entity Framework。这将允许您将应用程序中的对象映射到数据库。

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

编辑:既然你的问题涉及到设计模式,我建议你研究存储库模式 - 它与ASP.NET MVC配合得很好,并且有很多示例。


感谢反馈 - 我正在使用Repositories和Entity Framework。我从EF对象映射到DTO,从服务器到客户端。我发现复杂的对象在它们回到服务器后很难映射回EF。我的感觉是,从你的回答中得出结论,没有一种“好的方法”来进行这种映射。 - Remus

0

我使用AutoMapper来进行双向映射。当映射回去时,您只需要确保自己处理任何集合即可。AutoMapper在展平结构方面表现出色,但在重建结构方面表现不佳。


是的,我也有同感 - AutoMapper在重组方面不容易使用。既然你把AutoMapper作为一个双向机制来使用,你对Bogard关于这种方法的博客文章有何看法?(请查看我问题中的链接) - Remus

-2

NHibernate是将您的DTO映射到数据库表的最佳方式。Entity Framework还没有准备好,就像ASP.NET MVC一样。使用NHibernate的Web Forms是最好的选择。


1
关于EF和MVC的绿色问题,这个回答有些奇怪。EF和MVC有很多成功的项目和庞大的社区。 - Danil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接