2016-05-16 10 views
5

Mam kilka klas:Jak mapować złożony obiekt za pomocą Automapper?

public class Customer 
{ 
    public string FirstName { get; set; } 

    public string LastName { get; set; } 

    public Product Product { get; set; } 
} 

public class Product 
{ 
    public string Name { get; set; } 
} 


public class Customer_ 
{ 
    public string FirstName { get; set; } 

    public string LastName { get; set; } 

    public Article Article { get; set; } 
} 

public class Article 
{ 
    public string ArticleName { get; set; } 
} 

I jeden przykład:

Customer[] Customer = new Customer[] 
{ 
    new Customer() 
    { 
     FirstName = "FirstName1", 
     LastName = "LastName1", 
     Product = new Product() 
     { 
      Name = "Product1" 
     } 
    }, 
    new Customer() 
    { 
     FirstName = "FirstName2", 
     LastName = "LastName2", 
     Product = new Product() 
     { 
      Name = "Product2" 
     } 
    } 
}; 

Chcę map to wystąpienie do Customer_ obiektu gdzie Customer.Product.Name = Customer_.Article.ArticleName

używam Automapper:

var config = new MapperConfiguration(cfg => 
{ 
    cfg.CreateMap<Product, Article>() 
    .ForMember(dest => dest.ArticleName, opt => opt.MapFrom(src => src.Name)); 

}); 

IMapper mapper = config.CreateMapper(); 
var desti = mapper.Map<Customer[], Customer_[]>(Customer); 

Ale mam wyjątek:

Missing type map configuration or unsupported mapping. 

Mapping types: 
Customer -> Customer_ 
Xml_Test.Customer -> Xml_Test.Customer_ 

Destination path: 
Customer_[][0] 

Source value: 
Xml_Test.Customer 

Co jest nie tak?

+1

Wystarczy dodać 'Customer' mapowanie:' cfg.CreateMap () 'jak powiedział w komunikacie o błędzie. –

Odpowiedz

4

to powinno rozwiązać problem -

AutoMapper.Mapper.CreateMap<Product, Article>() 
      .ForMember(a => a.ArticleName, b => b.ResolveUsing(c => c.Name)); 
AutoMapper.Mapper.CreateMap<Customer, Customer_>() 
      .ForMember(a => a.Article, b => b.ResolveUsing(c => c.Product)); 
Powiązane problemy