[英]how to map only if destination object doesn't have a value in Automapper
[英]Automapper - how to create map for this specific value object?
这是我的域模型的表示:
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得到处理?
当前,它显然没有映射,因此没有使用检索到的值填充。
看来您的AddressInfo
类没有设置器或构造函数参数,然后将它们设置为您的收件人,公司,城市后备变量。 因此, 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>();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.