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