gpt4 book ai didi

c# - Automapper 合并/合并映射

转载 作者:行者123 更新时间:2023-11-30 18:36:03 24 4
gpt4 key购买 nike

假设我有这些映射:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com