有没有办法做到这一点?我们有一个SummaryDto,它映射了三种不同的类型,当我们为每种类型创建一个map时,未映射的props会抛出错误.摘要dto上有大约35个属性.要在每个上使用Ignore()选项太麻烦了.全球忽视了吗?就像是
CreateMap<Source,Target>()
.IgnoreAllUnmapped();
Run Code Online (Sandbox Code Playgroud)
Cod*_*ing 117
这对我有用:
public static class MappingExpressionExtensions
{
public static IMappingExpression<TSource, TDest> IgnoreAllUnmapped<TSource, TDest>(this IMappingExpression<TSource, TDest> expression)
{
expression.ForAllMembers(opt => opt.Ignore());
return expression;
}
}
Run Code Online (Sandbox Code Playgroud)
因为ForAllMembers返回void,ForAllMembers(o => o.Ignore())没有此扩展方法的调用将不起作用.我们希望保持映射表达式可用于启用后续映射:
CreateMap<Source, Destination>()
.IgnoreAllUnmapped()
.ForMember(d => d.Text, o => o.MapFrom(s => s.Name))
.ForMember(d => d.Value, o => o.MapFrom(s => s.Id));
Run Code Online (Sandbox Code Playgroud)
Nic*_*een 30
我也在这个问题上挣扎了很长一段时间,或者至少是与此类似的问题.我有一个有很多属性的类(大约30个),我只想映射其中的4个.添加26个忽略语句似乎很疯狂(特别是当它意味着未来对类的更改将意味着必须更新它们时!)
我终于发现我可以告诉AutoMapper忽略所有内容,然后明确地添加我想要的那些.
// Create a map, store a reference to it in a local variable
var map = CreateMap<Source,Target>();
// Ignore all members
map.ForAllMembers(opt => opt.Ignore());
// Add mapping for P1
map.ForMember(dest => dest.P1, opt => opt.MapFrom( src => src.P1));
// Add other mappings...
map.ForMember(dest => dest.P2, opt => opt.MapFrom( src => src.P2));
map.ForMember(dest => dest.P3, opt => opt.MapFrom( src => src.P3));
map.ForMember(dest => dest.P4, opt => opt.MapFrom( src => src.P4));
Run Code Online (Sandbox Code Playgroud)
你会认为你可以这样做(但不要因为它不会编译)你会被原谅:
// This won't compile
CreateMap<Source,Target>()
.ForAllMembers(opt => opt.Ignore())
.ForMember(dest => dest.P1, opt => opt.MapFrom( src => src.P1));
Run Code Online (Sandbox Code Playgroud)
这不起作用的原因是ForAllMembers()方法不支持流畅的链接样式(至少在当前版本2.0中).
好消息是非链接版本确实有效.当然需要注意的是,您需要明确告诉AutoMapper要映射哪些成员.我还没有找到一种简单的方法来同时使用它,这样你仍然可以使用隐含的映射并忽略破坏的映射.
| 归档时间: |
|
| 查看次数: |
58177 次 |
| 最近记录: |