2017-10-05 230 views
0

假設我有以下類Automapper和嵌套對象

public class Parent { 
    public int ParentId { get; set; } 
    public List<Child> Children{get; set; } 
    // other properties 
} 

public class Child { 
    public int ChildId { get; set; } 
    // other properties 
} 


public class ParentVm { 
    public int ParentId { get; set; } 
    public List<ChildVm> Children{get; set; } 
    // other properties 
} 

public class ChildVm { 
    public int ParentId { get; set; } 
    public int ChildId { get; set; } 
    // other properties 
} 

Parent parent = /*something*/ 
var parentVm = Mapper.Map<ParentVm>(parent); 

ChildVm,有物業ParentId。我該如何傳播這個值來使用automapper?

+0

它不通過你的問題,你試圖映射'ChildVm'.'ParentId'任何東西出現。另外,如果您嘗試創建'ParentVm',則該Mapper.Map'命令顯示爲反向,因爲該行將創建一個'Parent'對象。 真正的用例是否試圖將具有'Child'對象的'Parent'對象映射到具有'ChildVm'對象的'ParentVm'?並且讓'Parent'.'ParentId'屬性傳播到'ChildVm'.'ParentId'屬性? –

回答

3

我對你的問題做了一些假設。

  1. 您試圖映射到ParentParentVm(和ChildChildVm)。
  2. 您正在設法編制ParentParentIdChildVmParentId

如果這兩個都是真的,那麼下面的代碼片段(來自LINQPad)應該可以幫到你。請注意在第一個CreateMap中使用AfterMap

void Main() 
{ 
    var config = new MapperConfiguration(cfg => 
    { 
     cfg.CreateMap<Parent, ParentVm>().AfterMap((s, d) => 
     { 
      foreach (var child in d.Children) 
      { 
       child.ParentId = d.ParentId; 
      } 
     }); 
     cfg.CreateMap<Child, ChildVm>(); 
    }); 

    var mapper = config.CreateMapper(); 

    var parent = new Parent { ParentId = 1, Children = new List<Child>() }; 
    var child1 = new Child { ChildId = 1 }; 
    var child2 = new Child { ChildId = 2 }; 
    parent.Children.Add(child1); 
    parent.Children.Add(child2); 

    var parentVm = mapper.Map<Parent, ParentVm>(parent); 
    parentVm.Dump(); 
} 

public class Parent 
{ 
    public int ParentId { get; set; } 
    public List<Child> Children { get; set; } 
    // other properties 
} 

public class Child 
{ 
    public int ChildId { get; set; } 
    // other properties 
} 


public class ParentVm 
{ 
    public int ParentId { get; set; } 
    public List<ChildVm> Children { get; set; } 
    // other properties 
} 

public class ChildVm 
{ 
    public int ParentId { get; set; } 
    public int ChildId { get; set; } 
    // other properties 
} 

輸出:

LINQPad Dump Results