c# - Automapper 合并/合并映射

标签 c# automapper-2

假设我有这些映射:

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/

相关文章:

c# - 优化Linq Where,使用key

c# - 将 XML 转换为 C# 对象

c# - 通过隐藏字段传递 JSON 序列化数据

c# - 使用 c# lambda 将 NameValueCollection 转换为查询字符串是否有效?

c# - C++ 这个简单的宏在做什么?

AutoMapper 自定义类型转换器不起作用

AutoMapper:MapFrom 和 ResolveUsing 之间有什么区别?

automapper - 使用 ValueInjector 或 Automapper 时,如何防止 "Target"对象中的值被 "Source"对象中的 null 覆盖?嵌套映射问题?

automapper - 如何将字符串文字映射到目标属性

c# - 使用键将列表映射到 Automapper 中的现有列表