【问题标题】:ASP.NET MVC: Best practice or design pattern for getting the DTO/EditModel into the DatabaseASP.NET MVC:将 DTO/EditModel 放入数据库的最佳实践或设计模式
【发布时间】:2010-11-12 00:19:30
【问题描述】:

我正在使用 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

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

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

更新:我的问题太主观了,因为没有这样做的一般做法。我的结论是很多人同时使用 AutoMapper,即使其他人不推荐它。

【问题讨论】:

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


    【解决方案1】:

    在最简单的形式中,您只需使用 AutoMapper 将您的模型映射到您的 Domain/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 持久化回数据存储区
    • 在答案中添加了更多内容。让我知道这是否更清楚。
    • 另外,在您发布的博客中,他谈到了为什么他不打算在 AutoMapper 中实现双向映射。他并不是说你不能有两张地图,一张从你的域到你的 DTO 显示数据,一张从你的 DTO 到你的域来保存数据。
    【解决方案2】:

    您的问题将有很多可能的答案,这里就不一一列举了。也就是说 - 我认为您接下来要研究的东西称为 ORM 或对象关系映射器。一些更常见的选项是 NHibernate 和实体框架。这将允许您获取应用程序中的对象并将它们映射到您的数据库。

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

    编辑:感觉你的问题是关于设计模式的,我建议你研究一下存储库模式——它与 ASP.NET MVC 配合得很好,而且有很多例子。

    【讨论】:

    • 感谢您的反馈 - 我正在使用存储库和实体框架。我从 EF 对象映射到从服务器到客户端的 DTO。我发现复杂对象一旦返回服务器就很难映射回 EF。从您的回答中,我的感觉是没有“好方法”来进行此映射。
    【解决方案3】:

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

    【讨论】:

    • 是的,这也是我的感觉——AutoMapper 不容易用于重构。既然您将 AutoMapper 作为一种双向机制,您如何看待 Bogard 关于这种方法的博文? (请参阅我的问题中的链接)
    【解决方案4】:

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

    【讨论】:

    • 关于 EF 和 MVC 绿色的奇怪答案。 EF 和 MVC 有很多成功的项目和大型社区。​​span>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 2010-12-01
    相关资源
    最近更新 更多