2011-08-25 3 views
14

내 객체가 기본 생성자가없는, 그들은 모두 내가 다음 줄을 추가기본 생성자없이 객체를 생성하는 Automapper을 사용하는 방법

new Entity(int 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 -of-property-setters – boca

답변

30

을보십시오. 여기에 데모가 있습니다 :

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은 뷰 모델에서 모델로 매핑 할 때 더 많은 유연성을 제공합니다. ConvertUsing으로 ConstructUsing을 사용할 수있는 방법이 있습니까? viewModel에서 생성자를 사용하여 모델에 매핑 할 때 몇 가지 속성을 매핑하고 싶지만 모델에서 모델로 매핑 할 때는 모든 속성을 매핑해야합니다. – akd

8

당신은 ConstructUsing 대신 ConvertUsing 사용할 수

Mapper.CreateMap<EntityDTO, Entity>().ConstructUsing(s => new Entity(s.RecordId)); 
관련 문제