2011-08-25 8 views
14

Đối tượng của tôi không có một constructor mặc định, tất cả đều đòi hỏi phải có chữ ký củaLàm thế nào để sử dụng Automapper để xây dựng đối tượng mà không cần constructor mặc định

new Entity(int recordid); 

tôi đã thêm dòng sau:

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

này khắc phục sự cố mà Automapper đang mong đợi một hàm tạo mặc định, tuy nhiên phần tử duy nhất được ánh xạ là id bản ghi.

Làm cách nào để nhận thông tin trên bản đồ bình thường? Làm thế nào để có được tất cả các thuộc tính của các thực thể được ánh xạ mà không cần phải tự ánh xạ các thuộc tính?

+0

RecordId đến từ đâu? EntityDTO? Nếu vậy, phiên bản mới nhất của AutoMapper được tìm thấy tại AutoMapper.org hỗ trợ lập bản đồ lập trình ánh xạ, có thể giúp bạn ở đây. –

+1

Bạn cần sử dụng ConstructUsing. Nhìn vào [câu trả lời này] [1] để biết chi tiết [1]: http://stackoverflow.com/questions/2239143/automapper-how-to-map-to-constructor-parameters-instead -of-property-setters – boca

Trả lời

30

Bạn có thể sử dụng ConstructUsing thay vì ConvertUsing. Đây là bản trình diễn:

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 cho phép linh hoạt hơn khi nói đến bản đồ từ mô hình chế độ xem đến mô hình. Có cách nào mà tôi có thể sử dụng ConstructUsing với ConvertUsing? Tôi muốn chỉ ánh xạ một vài thuộc tính khi ánh xạ từ viewModel đến mô hình với một hàm tạo nhưng khi ánh xạ từ mô hình để xem mô hình, tất cả các thuộc tính sẽ được ánh xạ. – akd

8

Hãy thử

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