如何使用AutoMapper将父级映射到子级?

时间:2017-08-24 00:53:48

标签: c# automapper

我有以下课程:

public class Parent {
    string id;
    Child child;
}

public class Child {
    string Name;
}

基本上我想做一个Automapper配置,允许我将Parent映射到Child。我怎么能这样做?

var parent = GetParent();
var child = Mapper.Map<Child>(parent);

是否有可用的方法,而无需使用

逐个映射成员
.ForMember(d=> d.Name, o=> o.MapFrom(src => src.child.Name));

原因:

1)孩子中有多个成员并且创建多个.ForMembers()似乎很乱。

2)使用Mapper.Map()代替直接访问对象,因为这是使用映射配置的父通用提供程序类。

1 个答案:

答案 0 :(得分:1)

在提供的简单案例中,

You rolled 4
You rolled 4
You rolled 1
You rolled 1
You rolled 6
You rolled 6

应该完成你在这里尝试做的事情。

示例代码如下 - 我在孩子身上加了一个ID来验证只有来自Parent.Child的字段会映射到新孩子。

请注意,这不会与.MapFrom()结合使用 - 所以如果您在孩子身上有一个ParentId属性,那么您需要做一些额外的手动映射,以便从父级到子级

关于多个.ForMember()看似凌乱 - 同意如果你有大量的映射可能会堆积,但根据我的经验,它可以有利于防止重命名重构破坏你的映射。强烈建议使用configuration validation单元测试来确保此类重构不会破坏您的映射。希望有所帮助!

.ProjectUsing(x => x.Child)