我需要找到一个更好的解决方案:
public MappingProfile()
{
CreateMap<DesireDto, Desire>()
.ForMember(x => x.CreationDate, x => x.Ignore())
.ForMember(x => x.ModifiedDate, x => x.Ignore())
.ForMember(x => x.ModifiedUser, x => x.Ignore())
.ForMember(x => x.CreationUser, x => x.Ignore())
.ForMember(x => x.Language, x => x.Ignore());
CreateMap<ProductDto, Product>()
.ForMember(x => x.CreationDate, x => x.Ignore())
.ForMember(x => x.ModifiedDate, x => x.Ignore())
.ForMember(x => x.ModifiedUser, x => x.Ignore())
.ForMember(x => x.CreationUser, x => x.Ignore())
.ForMember(x => x.Language, x => x.Ignore());
}
我对两者都有相同的条件,但这看起来很丑陋
答案 0 :(得分:0)
你可以试试这个:
var map1 = CreateMap<DesireDto, Desire>();
var map2 = CreateMap<ProductDto, Product>();
foreach (var s in new []{nameof(DesireDto.CreationDate),nameof(DesireDto.ModifiedDate),nameof(DesireDto.ModifiedUser),nameof(DesireDto.CreationUser),nameof(DesireDto.Language)})
{
map1.ForMember(s,x=>x.Ignore()) ;
map2.ForMember(s,x=>x.Ignore()) ;
}
但你应该听听Fals关于SRP的建议。
如果DesireDto
和ProductDto
共享某个成员,也许您应该尝试拥有基类或接口,并应用所需的忽略规则。
答案 1 :(得分:0)
您可以在根配置级别使用ForAllPropertyMaps。这允许您筛选类型,名称空间,属性名称,然后忽略:
cfg.ForAllPropertyMaps(pm =>
pm.DestinationProperty.DeclaredType.Namespace == "Whatever" &&
pm.DestinationProperty.Name == "CreationDate",
(pm, opt) => opt.Ignore());
然后重复您要忽略的所有不同属性。命名空间确保您只对特定命名空间中的类型的目标成员进行过滤,但您可以根据类型元数据执行任何操作。