2017-10-05 33 views
0

は私がChildVmAutomapperとネストされたオブジェクト

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

次のクラスがあるとし、プロパティParentIdがあります。どのように私はautomapperを使用してその値を伝播できますか?

+0

は、それはあなたが何にも 'ChildVm'.'ParentId'をマップしようとしているあなたの質問では表示されません。また、 'ParentVm'を作成しようとすると' Mapper.Map'コマンドが後方にあるように見えます。その行は 'Parent'オブジェクトを作成するためです。 'Child'オブジェクトを持つ' Parent'オブジェクトを 'ChildVm'オブジェクトを持つ' ParentVm'にマップしようとする実際の使用例ですか?そして 'Parent'.ParentId'プロパティが' ChildVm'.ParentId'プロパティに伝播するようにするには? –

答えて

3

私はあなたの質問でいくつか前提をしています。

  1. あなたはParentVmからParent(およびChildVmからChild)をマッピングしようとしています。
  2. Parentにマップしようとしています。 ParentId~ChildVmParentId

これらの両方が当てはまる場合は、次のコードスニペット(LINQPad)が役立ちます。最初のCreateMapAfterMapの使用に注意してください。

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

関連する問題