2011-08-25 34 views
14

我的對象不具有默認的構造函數,它們都需要添加以下行的如何使用Automapper構建對象,而默認的構造函數

new Entity(int recordid); 

簽名:

Mapper.CreateMap<EntityDTO, Entity>().ConvertUsing(s => new Entity(s.RecordId)); 

這修復了Automapper需要默認構造函數的問題,但唯一映射的元素是記錄ID。

我該如何獲得它正常的映射?如何獲取要映射的實體的所有屬性而無需手動映射屬性?

+0

RecordId從哪裏來? EntityDTO?如果是這樣,在AutoMapper.org上發現的AutoMapper的最新版本支持映射構造函數參數,這可能會幫助你。 –

+1

您需要使用ConstructUsing。 看[這個答案] [1]細節 [1]:http://stackoverflow.com/questions/2239143/automapper-how-to-map-to-constructor-parameters-instead屬性設置器 – boca

回答

30

你可以使用ConstructUsing代替ConvertUsing。這裏有一個演示:

using System; 
using AutoMapper; 

public class Source 
{ 
    public int RecordId { get; set; } 
    public string Foo { get; set; } 
    public string Bar { get; set; } 
} 

public class Target 
{ 
    public Target(int recordid) 
    { 
     RecordId = recordid; 
    } 

    public int RecordId { get; set; } 
    public string Foo { get; set; } 
    public string Bar { get; set; } 
} 


class Program 
{ 
    static void Main() 
    { 
     Mapper 
      .CreateMap<Source, Target>() 
      .ConstructUsing(source => new Target(source.RecordId)); 

     var src = new Source 
     { 
      RecordId = 5, 
      Foo = "foo", 
      Bar = "bar" 
     }; 
     var dest = Mapper.Map<Source, Target>(src); 
     Console.WriteLine(dest.RecordId); 
     Console.WriteLine(dest.Foo); 
     Console.WriteLine(dest.Bar); 
    } 
} 
+0

ConvertUsing爲從視圖模型到模型的映射提供了更大的靈活性。有什麼辦法可以使用ConstructUsing和ConvertUsing?我只想映射一些屬性,當從viewModel映射到具有構造函數的模型時,但是當從模型映射到視圖模型時,所有屬性都應該映射。 – akd

8

嘗試

Mapper.CreateMap<EntityDTO, Entity>().ConstructUsing(s => new Entity(s.RecordId)); 
相關問題