2012-02-17 38 views
17

Tôi đang cố gắng sử dụng Automapper để ánh xạ tới các đối tượng, vấn đề là một trong những đối tượng mà tôi đang cố gắng ánh xạ có tiền tố 'Cust_' trước tất cả các thuộc tính của nó. Có cách nào để tạo bản đồ này không.AutoMapper với tiền tố

Ví dụ nói rằng tôi có

class A 
{ 
     String FirstName { get; set; } 
     String LastName { get; set; } 
} 

class B 
{ 
     String Cust_FirstName { get; set; } 
     String Cust_LastName { get; set; } 
} 

Rõ ràng bản đồ này sẽ không làm việc

AutoMapper.Mapper.CreateMap<A, B>(); 
b = AutoMapper.Mapper.Map<A, B>(a); 

Trả lời

22
Mapper.Initialize(cfg => 
{ 
    cfg.RecognizeDestinationPrefixes("Cust_"); 
    cfg.CreateMap<A, B>(); 
}); 

A a = new A() {FirstName = "Cliff", LastName = "Mayson"}; 
B b = Mapper.Map<A, B>(a); 

//b.Cust_FirstName is "Cliff" 
//b.Cust_LastName is "Mayson" 

Hoặc cách khác:

Mapper.Configuration.RecognizeDestinationPrefixes("Cust_"); 
Mapper.CreateMap<A, B>(); 
... 
B b = Mapper.Map<A, B>(a); 
... 
+2

Chúc mừng cả hai phương pháp hoạt động hoàn hảo. Mặc dù cả hai phương pháp dường như không cụ thể cho bản đồ thực tế A đến B, nhưng thực sự sẽ ảnh hưởng đến bất kỳ ánh xạ nào khác nói A đến C –

+0

@CliffMayson nhưng tôi không nghĩ rằng đây là vấn đề, đặc biệt trong trường hợp bạn có nhiều các lớp đích theo cùng một quy ước. Trong trường hợp bạn thực sự cần phải có các cấu hình riêng biệt, ví dụ bạn cần có logic khác nhau để ánh xạ cùng hai lớp, bạn luôn có thể tạo 'MappingEngine' chuyên dụng với cấu hình riêng của chúng. HTH. –

0

Các tài liệu có một bài viết về Recognizing pre/postfixes

Đôi khi thuộc tính nguồn/đích của bạn sẽ có tiền tố/hậu tố phổ biến khiến bạn phải thực hiện một loạt ánh xạ thành viên tùy chỉnh vì tên không khớp. Để giải quyết vấn đề này, bạn có thể nhận ra tiền tố/hậu tố:

public class Source { 
    public int frmValue { get; set; } 
    public int frmValue2 { get; set; } 
} 
public class Dest { 
    public int Value { get; set; } 
    public int Value2 { get; set; } 
} 
Mapper.Initialize(cfg => { 
    cfg.RecognizePrefix("frm"); 
    cfg.CreateMap<Source, Dest>(); 
}); 

Mapper.AssertConfigurationIsValid(); Theo mặc định, AutoMapper nhận tiền tố "Nhận", nếu bạn cần xóa tiền tố:

Mapper.Initialize(cfg => { 
    cfg.ClearPrefixes(); 
    cfg.RecognizePrefixes("tmp"); 
}); 
Các vấn đề liên quan