如何从非常简单的示例中了解Automapper项目的用法?

时间:2017-08-30 10:05:17

标签: automapper

我完全理解了automapper映射的意义,但我从未将项目用于数据库实体。有没有办法解释简单的例子,为什么我会使用项目超过正常的映射?

2 个答案:

答案 0 :(得分:0)

在这里阅读示例:https://github.com/AutoMapper/AutoMapper/wiki/Queryable-Extensions,看起来ProjectTo方法可以为您节省一些代码:

给出的例子是:

Mapper.Initialize(cfg => 
    cfg.CreateMap<OrderLine, OrderLineDTO>()
    .ForMember(dto => dto.Item, conf => conf.MapFrom(ol => ol.Item.Name)));

public List<OrderLineDTO> GetLinesForOrder(int orderId)
{
  using (var context = new orderEntities())
  {
    return context.OrderLines.Where(ol => ol.OrderId == orderId)
             .ProjectTo<OrderLineDTO>().ToList();
  }
}

使用ProjectTo可以让Linq同时选择并映射到DTO,因此您不必进行映射,也无需计算出需要选择的实体字段。

如果您没有使用ProjectTo,则必须使用类似以下返回语句的内容:

return context.OrderLines.Where(ol => ol.OrderId == orderId)
    .Select(ol => new OrderLineDTO {Item = ol.Item.Name}).ToList());

答案 1 :(得分:0)

阅读文档,但我想使用ProjectTo而不是Map的主要原因是削减中间人。 ProjectTo在运行时没有实体实例,只是视图模型。因此,您可以从数据库投影到视图模型,而不是像从数据库到实体一样来查看模型。事实上,所有ProjectTo都会生成一个select语句。

context.Entities.Select(e=>new Dto { Property = e.Property, ...});

你可以自己see