如何绘制复杂模型

时间:2012-04-09 15:53:18

标签: automapper flatten

我有一个如下所示的源模型:

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,这样可行。然后单独执行地图。但这似乎很糟糕。如果可能的话,我宁愿在单个映射中完成它。我错过了一些简单的方法吗?

1 个答案:

答案 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);