2017-08-30 32 views

回答

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语句来代替:

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

阅读文档,但我想最主要的原因使用ProjectTo而不是地图是切割中间人。使用ProjectTo在运行时没有实体实例,只是查看模型。所以你从数据库项目来查看模型,而不是从数据库到实体来查看模型,就像使用Map一样。事实上,所有ProjectTo都会生成一个select语句。

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

你可以see那个你自己。

相关问题