0

这是我的域模型的表示:Automapper - 如何为这个特定的值对象创建地图?

public class AddressInfo 
    { 
     private readonly string addressee; 
     private readonly string company; 
     private readonly string city; 



     public string Addressee 
     { 
      get { return addressee; } 
     } 

     public string Company 
     { 
      get { return company; } 
     } 

     public string City 
     { 
      get { return city; } 
     } 
    } 



public class Address 
     { 
      public int Id { get; set; } 
      public string Name { get; set; } 
      public AddressInfo AddressInfo { get; set; } 
     } 

这是我的实体类:

public class AddressEntity 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public AddressInfo AddressInfo { get; set; } 
} 

这是我能够检索值而不是将它们映射在我的仓库的代表以我想要的方式。

public class AddressRepository 
    { 
     public static void CreateMappings() 
     { 
     //How to construct a map here to take care of 
     //the map creation of AddressInfo?? 

     Mapper.CreateMap<AddressEntity, Address>(); 
     } 

     public IEnumerable<Address> GetAllAddresses (User user) 
     { 
      var addressentities = GetAddresses(user.Id); 
      return addressentities == null? 
           null: 
           Mapper.Map<IEnumerable<Address>>(addressentities); 
     } 


    } 

如何创建使AddressInfo的是照顾地图????
目前它没有填充检索值,因为它显然没有被映射。

回答

1

它看起来像你的AddressInfo类没有setter或constructors参数然后设置为你的收件人,公司,城市支持变量。因此AutoMapper无法设置数据。

如果您想控制AutoMapper地图的方式,您可以创建一个继承自TypeConverter的类。

//This is also easier to unit test if you have conversions that are not 100% automappable. 
public class AddressEntityToAddress : TypeConverter<AddressEntity, Address> 
{ 
    protected override Address ConvertCore(AddressEntity source) 
    { 
     if(source == null) 
     { 
      return null; 
     } 

     var destination = new Address 
     { 
      Id = source.Id, 
      DisplayName = source.DisplayName, 
      AddressInfo = source.AddressInfo 
     }; 

      //do other magic you may want during conversion time 

     return destination; 
    } 
} 

后创建的类型转换器类,你可以设置AutoMapper在您CreateMapping方法使用这样的:

public static void CreateMappings() 
{ 
    Mapper.CreateMap<AddressEntity, Address>().ConvertUsing<AddressEntityToAddress>(); 
} 
相关问题