假设我有这些映射:
var mapping1 = Mapper.CreateMap<Order, BaseDto>()
.ForMember(o => o.Referrer, m => m.Ignore());
var mapping2 = Mapper.CreateMap<Order, DetailDto>()
.ForMember(o => o.Price, m => m.Ignore());
var mapping3 = Mapper.CreateMap<Order, UpdateDto>()
.ForMember(o => o.Temp, m => m.Ignore());
Dtos的继承:
DetailDto : BaseDto
UpdateDto : BaseDto
有什么方法可以将第一个映射合并/合并到 mapping2 和 mapping3 中吗?
像这样:
var mapping1 = Mapper.CreateMap<Order, BaseDto>()
.ForMember(o => o.Referrer, m => m.Ignore());
var mapping2 = Mapper.CreateMap<Order, DetailDto>()
.Import(mapping1);
.ForMember(o => o.Price, m => m.Ignore());
var mapping3 = Mapper.CreateMap<Order, UpdateDto>()
.Import(mapping1);
.ForMember(o => o.Temp, m => m.Ignore());
.Include
函数似乎没有执行我想要的操作,因为以下内容不起作用:
var mapping1 = Mapper.CreateMap<Order, BaseDto>()
.Include<Order, DetailDto>()
.Include<Order, UpdateDto>()
.ForMember(o => o.Referrer, m => m.Ignore());
var mapping2 = Mapper.CreateMap<Order, DetailDto>()
.ForMember(o => o.Price, m => m.Ignore());
var mapping3 = Mapper.CreateMap<Order, UpdateDto>()
.ForMember(o => o.Temp, m => m.Ignore());
更新:将问题编辑得更具体
最佳答案
我想知道这是不是一个错误。 documentation状态:
In AutoMapper 2.0, this becomes:
Mapper.CreateMap<Order, OrderDto>() .Include<OnlineOrder, OnlineOrderDto>() .Include<MailOrder, MailOrderDto>() .ForMember(o=>o.Id, m=>m.MapFrom(s=>s.OrderId)); Mapper.CreateMap<OnlineOrder, OnlineOrderDto>(); Mapper.CreateMap<MailOrder, MailOrderDto>();
Because we have defined the mapping for the base class, we no longer have to define it in the child mappings.
我刚刚升级到 AutoMapper 2.2.1-ci9000
并且我得到了与您相同的行为(即,Referrer
未被忽略)。
我建议你create an issue看看他们怎么说。
关于c# - Automapper 合并/合并映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14154987/