下面是现在的样子。DestinationA和DestinationB是从某些DestinationBase类派生出来的。我需要忽略所有这些派生类的一些公共属性。全局是否可以应用这些忽略选项,而不必对所有派生目标类重复使用?
Mapper.CreateMap<SourceA, DestinationA>()
.ForMember(d => d.PropA, opt => opt.Ignore())
.ForMember(d => d.PropB, opt => opt.Ignore())
.ForMember(d => d.PropC, opt => opt.Ignore());
Mapper.CreateMap<SourceB, DestinationB>()
.ForMember(d => d.PropA, opt => opt.Ignore())
.ForMember(d => d.PropB, opt => opt.Ignore())
.ForMember(d => d.PropC, opt => opt.Ignore());
我期待着这样的事情:
Mapper.CreateMap<DestinationBase>().ForAllSource()
.ForMember(d => d.PropA, opt => opt.Ignore())
.ForMember(d => d.PropB, opt => opt.Ignore())
.ForMember(d => d.PropC, opt => opt.Ignore());
发布于 2017-10-08 22:22:58
您可以忽略所有未映射的全局属性。虽然这与automapper的主要优点相矛盾,但只允许进行显式映射:这是Automapper 6的:
var mapperConfiguration = new MapperConfiguration(cfg =>
{
cfg.AddProfile(new MyProfile());
// ignore all unmapped properties globally
cfg.ForAllMaps((map, exp) => exp.ForAllOtherMembers(opt => opt.Ignore()));
});
发布于 2012-11-27 02:33:37
现在有了一种方法FindTypeMapFor,它使这个扩展方法更小(并且更高效?):
public static IMappingExpression<TSource, TDestination> IgnoreAllNonMapped<TSource, TDestination>(this IMappingExpression<TSource, TDestination> expression)
{
foreach (var property in Mapper.FindTypeMapFor<TSource, TDestination>().GetUnmappedPropertyNames())
{
expression.ForMember(property, opt => opt.Ignore());
}
return expression;
}
发布于 2014-04-17 21:19:30
我也有同样的问题,在寻求帮助的时候遇到了这个老问题。最后我想出了下面的解决方案。也许这对其他人有帮助。
我有几个从基类派生出来的类。我希望从基类派生的任何类的所有映射中排除该基类的一个属性。在创建映射(并且没有指定任何忽略选项)之后,我执行以下操作:
foreach(var map in Mapper.GetAllTypeMaps())
{
if (typeof(MyBaseClass).IsAssignableFrom(map.DestinationType))
{
var propInfo = map.DestinationType.GetProperty("PropertyToIgnore");
if (propInfo != null) {
map.FindOrCreatePropertyMapFor(new AutoMapper.Impl.PropertyAccessor(propInfo)).Ignore();
}
}
}
这是一个有点蛮力,因为我必须循环所有类型的地图,但它完成了工作。
编辑:将缺失的{添加到if语句中
https://stackoverflow.com/questions/8663771
复制相似问题