我正在使用Automapper,我有以下场景:类OrderModel有一个名为'ProductName'的属性,它不在数据库中 . 所以,当我尝试使用以下方法进行映射时:
Mapper.CreateMap<OrderModel, Orders>();
它会生成一个异常:
“Project.ViewModels.OrderModel上的以下1个属性未映射:'ProductName'
我在AutoMapper's Wiki for Projections读过相反的情况(额外的属性在目的地,而不是在源,这实际上是我的情况)
如何避免使用automapper来映射此属性?
8 回答
来自Jimmy Bogard:
CreateMap<Foo, Bar>().ForMember(x => x.Blarg, opt => opt.Ignore());
它在one of the comments at his blog .
我可能是一个完美主义者;我不太喜欢ForMember(...,x => x.Ignore())语法 . 这是一件小事,但对我来说很重要 . 我写了这个扩展方法,使它更好一点:
它可以像这样使用:
您也可以重写它以使用
params
,但我不喜欢带有大量lambdas的方法的外观 .你可以这样做:
现在(AutoMapper 2.0)有一个IgnoreMap属性,我将使用它而不是流畅的语法,这有点笨笨 .
对于任何尝试自动执行此操作的人,您可以使用该扩展方法忽略目标类型上的非现有属性:
使用如下:
感谢Can Gencer提示:)
来源:http://cangencer.wordpress.com/2011/06/08/auto-ignore-non-existing-properties-with-automapper/
将视图模型映射回域模型时,简单地验证源成员列表而不是目标成员列表可以更简洁
现在我的映射验证不会失败,每次我向域类添加属性时都需要另一个
Ignore()
.你好所有请使用此工作正常...自动映射器在C#中使用多个 .ForMember
我很欣赏Steve Rukuts添加的扩展程序,因此我决定根据他的示例添加一个扩展方法 . 希望它会帮助某人:
用法: