2017-08-24 66 views
2

我有以下類別:如何使用AutoMapper將父母映射到孩子?

public class Parent { 
    string id; 
    Child child; 
} 

public class Child { 
    string Name; 
} 

基本上我想辦一個Automapper配置,讓我到父映射到兒童。我怎樣才能做到這一點 ?

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

在所提供的簡單的情況下,

.ProjectUsing(x => x.Child) 

要做到你想在這裏做什麼。

示例代碼如下 - 我已在孩子中包含一個Id來驗證只有來自Parent.Child的字段將映射到新孩子。

請注意,這不會與.MapFrom()相結合 - 因此,如果您有,例如,孩子的ParentId屬性,您需要做一些額外的手動映射,以從父級到孩子。

關於多個.ForMember()看似凌亂 - 同意如果您有大量映射正在進行,它可能會堆積如山,但根據我的經驗,這可以有助於防止重命名重構破壞映射。強烈鼓勵使用configuration validation單元測試來確保這樣的重構不會破壞您的映射。希望有所幫助!

class Program 
{ 
    static void Main(string[] args) 
    { 
     Mapper.Initialize(MapperConfiguration); 

     var parent = new Parent() 
     { 
      Id = "a", 
      Child = new Child() 
      { 
       Name = "ChildA", 
       Id = 1 
      } 
     }; 

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

     Console.Read(); 
    } 

    private static void MapperConfiguration(IMapperConfigurationExpression mapper) 
    { 
     mapper.CreateMap<Parent, Child>() 
      .ProjectUsing(x => x.Child); 
    } 

    public class Parent 
    { 
     public string Id { get; set; } 
     public Child Child { get; set; } 
    } 

    public class Child 
    { 
     public string Name { get; set; } 
     public int Id { get; set; } 
    } 
} 
相關問題