1

我有一个看起来像这样的源模型:

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 的所有属性?(有很多)。

我的第一个解决方案是将 Foo 和 Bar 分别映射到 NewFooBar,这很有效。然后单独执行映射。但这似乎很笨拙。如果可能的话,我宁愿在单个映射中进行。我错过了一些简单的方法吗?

4

1 回答 1

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);
于 2012-04-09T23:49:42.840 回答