对于某些属性,当值为0时,我想将值转换为NULL。
当我创建地图时,我使用自定义解析器为我处理转换,如下所示:
AutoMapper.Mapper.CreateMap<ContactData, Contact>()
.ForMember(x => x.ContactTypeId, y => y.ResolveUsing<ContactTypeIdZeroToNullResolver>());
我的解析器看起来像:
using AutoMapper;
namespace MyCompany.MyProduct.Customers.Data.Helpers
{
public class ContactTypeIdZeroToNullResolver : ValueResolver<ContactData, int?>
{
protected override int? ResolveCore(ContactData source)
{
if (source.ContactTypeId == 0)
return null;
return source.ContactTypeId;
}
}
}
这很好用!
我的问题是,是否有可能使这更通用?我尝试使用int替换ContactData,但是错误仍然被抛出。
答案 0 :(得分:1)
这样的事情怎么样:
AutoMapper.Mapper.CreateMap<int, int?>()
.ConvertUsing(src => src == 0 ? (int?)null : src);
AutoMapper.Mapper.CreateMap<ContactData, Contact>();
AutoMapper.Mapper.AssertConfigurationIsValid();
(当然假设ContactTypeId
是int
中的ContactData
和int?
中的Contact
您应该小心这一点,因为它将适用于这些类型的所有映射。
你也可以这样内联:
AutoMapper.Mapper.CreateMap<ContactData, Contact>()
.ForMember(dest => dest.ContactTypeId,
opt => opt.MapFrom(src => src.ContactTypeId == 0
? (int?)null
: src.ContactTypeId));
将实现相同的目标,但不会像通用那样。