仅当目标值为 null 时才映射
Map only if destination value is null
我是 automapper 的新手,我试图仅在目标值为空时映射,我检查了文档,但它只显示源值的条件。我可以知道如何在条件下检查目标值吗?
this.CreateMap<DtoObject, MyObject>()
.EqualityComparison((dto, o) =>
dto.id== o.id)
.ForMember(s => s.MyField, opt =>
{
//I want to Map only MyField of destination object is null, otherwise I don't want to map. But How can I get destination's MyField value?
});
有两种方法可以达到这个效果。
首选方法是使用 Automapper conditional Mapping:
CreateMap<DtoObject, MyObject>()
.ForMember(dest => dest.MyField, opt =>
{
opt.PreCondition((source, dest, ctx) => dest.MyField == null);
opt.MapFrom(src => src.MyField);
});
另一种方法是在映射过程中使用AfterMap
方法结合Ignore
,就像这样。
CreateMap<DtoObject, MyObject>()
.ForMember(d => d.MyField, a => a.Ignore())
.AfterMap((source, destination) =>
{
if (destination.MyField == null)
{
destination.Name = source.MyField;
}
});
这将告诉 AutoMapper 在映射过程中忽略 属性,并在映射后执行一些自定义逻辑。
看看AutoMapper Conditional mapping。
使用 PreCondition
允许访问 source
和 destination
并在应映射 属性 时设置条件:
this.CreateMap<DtoObject, MyObject>()
.EqualityComparison((dto, o) =>
dto.id== o.id)
.ForMember(s => s.MyField, opt =>
{
opt.PreCondition((dest, src) => dest.SomeDestinationProperty == null);
opt.MapFrom(src => src.SomeSourceProperty);
});
我是 automapper 的新手,我试图仅在目标值为空时映射,我检查了文档,但它只显示源值的条件。我可以知道如何在条件下检查目标值吗?
this.CreateMap<DtoObject, MyObject>()
.EqualityComparison((dto, o) =>
dto.id== o.id)
.ForMember(s => s.MyField, opt =>
{
//I want to Map only MyField of destination object is null, otherwise I don't want to map. But How can I get destination's MyField value?
});
有两种方法可以达到这个效果。
首选方法是使用 Automapper conditional Mapping:
CreateMap<DtoObject, MyObject>()
.ForMember(dest => dest.MyField, opt =>
{
opt.PreCondition((source, dest, ctx) => dest.MyField == null);
opt.MapFrom(src => src.MyField);
});
另一种方法是在映射过程中使用AfterMap
方法结合Ignore
,就像这样。
CreateMap<DtoObject, MyObject>()
.ForMember(d => d.MyField, a => a.Ignore())
.AfterMap((source, destination) =>
{
if (destination.MyField == null)
{
destination.Name = source.MyField;
}
});
这将告诉 AutoMapper 在映射过程中忽略 属性,并在映射后执行一些自定义逻辑。
看看AutoMapper Conditional mapping。
使用 PreCondition
允许访问 source
和 destination
并在应映射 属性 时设置条件:
this.CreateMap<DtoObject, MyObject>()
.EqualityComparison((dto, o) =>
dto.id== o.id)
.ForMember(s => s.MyField, opt =>
{
opt.PreCondition((dest, src) => dest.SomeDestinationProperty == null);
opt.MapFrom(src => src.SomeSourceProperty);
});