【问题标题】:Automapper, mapping multiple properties into 1 w/o ValueResolverAutomapper,将多个属性映射到 1 个 w/o ValueResolver
【发布时间】:2017-05-06 05:50:14
【问题描述】:

我当前的代码正在运行:

map.ForMember(x => x.Address, m => m.ResolveUsing(l => {
    var engine = new MappingEngine((IConfigurationProvider)cfg);
    var adress = engine.Map<AddressDto>(l.ContactInfo);
    engine.Map(l.Address, adress);
    return adress;
}));

但我认为可能还有另一种方式,例如:

map.ForMember(x => x.Address, m => m.MapFrom(x => x.ContactInfo));
map.ForMember(x => x.Address, m => m.MapFrom(x => x.Address));

但最后一个 ForMember 似乎覆盖了现有地图。

我正在尝试将 Address 和 ContactInfo 属性组合到 ListingDto.Address 上的单个对象中。

void Main()
{
    var map = Mapper.CreateMap<Listing, ListingDto>();
    var cfg = Mapper.Configuration;
    map.ForMember(x => x.Address, m => m.ResolveUsing(l => {
        var engine = new MappingEngine((IConfigurationProvider)cfg);
        var adress = engine.Map<AddressDto>(l.ContactInfo);
        engine.Map(l.Address, adress);
        return adress;
    }));

    Mapper.CreateMap<Address, AddressDto>()
    .ForMember(x => x.Latitude, x => x.Ignore());
    Mapper.CreateMap<ContactInfo, AddressDto>()
    .ForMember(x => x.Street, x=> x.Ignore());

    Mapper.Map<ListingDto>(new Listing{ 
    Name="Foo", 
    Address = new Address{Street = "Street"},
    ContactInfo = new ContactInfo{ Latitude = "latitude"}}).Dump();
}

// Define other methods and classes here
public class Listing{        
    public string Name { get; set; }
    public Address Address { get; set; }
    public ContactInfo ContactInfo {get;set;}
}

public class ContactInfo{
    public string Latitude {get;set;}
}
public class Address{
    public string Street {get;set;}
}


public class AddressDto{
    public string Latitude {get;set;}
    public string Street {get;set;}
}

public class ListingDto{
    public string Name { get; set; }
    public AddressDto Address {get;set;}
}

.Dump()

【问题讨论】:

    标签: automapper


    【解决方案1】:

    这样的事情应该可以工作:

    .ForMember(x => x.Address, o => o.MapFrom(
        s => new AddressDto { 
            Latitude = s.ContactInfo.Latitude, 
            Street = s.Address.Street }));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-11
      • 1970-01-01
      • 1970-01-01
      • 2020-02-29
      • 1970-01-01
      • 1970-01-01
      • 2017-08-29
      • 2014-03-31
      相关资源
      最近更新 更多