【问题标题】:Entity objects to business object实体对象到业务对象
【发布时间】:2016-08-10 21:11:23
【问题描述】:

我正在开发一个新项目并想使用 MVC 和实体框架。为了分离关注点。我打算像这样构建我的项目..

  • MyProject.Web(该项目包含 MVC 的 V 和 C)
  • MyProject.Model(该项目包含 MVC 的 M,以便可以重复使用和共享。这是我的业务对象/域对象所在的位置)
  • MyProject.BLL(这是我编写业务逻辑并通过接口提供的地方)
  • MyProject.Entity(这是我的 DAL - 向导将使用 db first 方法在其中生成实体对象)

我的问题是在我的 BLL 中将实体对象转换为业务对象的最佳方法是什么?我的映射要求我连接两个表并计算一个总和,该总和将映射到业务对象中的一个字段。

不确定这是一个很好的例子,但假设我加入了客户表和订单表,并为同一个客户返回了两条记录。一种是在上午下订单,另一种是在下午下订单。我需要计算当天的总数并将其映射到我的业务对象中的一个字段。

想到Automapper而不是手动编码DTO,但我不确定它是否可以进行复杂的映射(使用总和计算)?

有没有办法在 EF 6 中手动配置自定义地图来做到这一点?

【问题讨论】:

    标签: c# asp.net-mvc entity-framework automapper


    【解决方案1】:

    借助 Automapper,您可以将 Projections 用于复杂的映射或使用 AutoMapper 的 QueryableExtensions 辅助方法。

    请参阅以下链接中的聚合部分。

    LINQ 可以支持聚合查询,AutoMapper 支持 LINQ 扩展方法

    https://github.com/AutoMapper/AutoMapper/wiki/Queryable-Extensions

    【讨论】:

    • 谢谢!让我试一试。我会回来发布更新。
    • 所以我看着自动映射器,一个灯泡亮了。而不是使用自动映射器。我只是为我的实体对象创建了一个扩展来返回子记录的总和,因为所有实体对象都是部分类。不确定这是不是正确的方法,但它解决了问题。我会将您的回复标记为答案,因为它实际上回答了我的问题 automapper 是否可以进行聚合。谢谢!
    • @NKD 这绝对是一个不错的选择。做事通常有多种方法。
    猜你喜欢
    • 2011-07-09
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    • 2010-11-23
    • 2011-04-30
    相关资源
    最近更新 更多