我有一个如下所示的源模型:
public class FooBar {
public Foo foo {get;set;}
public Bar bar {get;set;|
}
public class Foo {
// tons of properties
}
public class Bar {
// tons of irrelevant properties
public Baz baz {get;set;}
}
然后我有一个目标模型将FooBar压平成NewFooBar,看起来像这样:
public class NewFooBar {
// all properties from Foo
public Baz baz {get;set;}
}
如何将FooBar映射到NewFooBar而无需单独映射所有foo的属性? (他们中有很多人)。
我的第一个解决方案是分别将Map Foo和Bar映射到NewFooBar,这样可行。然后单独执行地图。但这似乎很糟糕。如果可能的话,我宁愿在单个映射中完成它。我错过了一些简单的方法吗?
答案 0 :(得分:1)
这会有用吗?
Mapper.CreateMap<Foo, NewFooBar>()
.ForMember(dest => dest.baz, opt => opt.Ignore())
;
Mapper.CreateMap<FooBar, NewFooBar>()
.ConvertUsing(src => {
var newFooBar = AutoMapper.Mapper.Map<Foo, NewFooBar>(src.foo);
newFooBar.baz = src.bar.baz;
return newFooBar;
});
;
然后
var newFooBar = AutoMapper.Mapper.Map<FooBar, NewFooBar>(fooBar);