2015-06-05 3 views
0

Я пытаюсь работать над примером примера для сопоставления CustomerViewItem (Source) и Customer (Destination).Объект в Automapper возвращает null

Вот исходные Сущности, что я пытаюсь сопоставить

public class CustomerViewItem 
{ 
    public CompanyViewItem companyViewItem { get; set; } 
    public string CompanyName { get; set; } 
    public int CompanyEmployees { get; set; } 
    public string CompanyType { get; set; } 
    public string FullName { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; }   
    public DateTime DateOfBirth { get; set; } 
    public int NumberOfOrders { get; set; } 
    public bool VIP { get; set; } 
} 

public class Customer 
{ 
    public Company company { get; set; }   
    public string CompanyName { get; set; } 
    public int CompanyEmployees { get; set; } 
    public string CompanyType { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public DateTime DateOfBirth { get; set; } 
    public int NumberOfOrders { get; set; } 
    public bool VIP { get; set; } 
} 

public class Address 
{ 
    public string TempAddress { get; set; } 
    public string PermAddress { get; set; } 
} 

public class Company 
{ 
    public string Name { get; set; } 
    public int Employees { get; set; } 
    public string Type { get; set; } 
    public Address address { get; set; } 

} 

public class CompanyViewItem 
{ 
    public string Name { get; set; } 
    public int Employees { get; set; } 
    public string Type { get; set; } 
    public Address address { get; set; } 
} 

Теперь для CustomerViewItem Сущности, я добавил некоторые примеры значений. Поскольку CompanyViewItem в CustomerViewItem класс, который в свою очередь был класс, я добавил значения таким образом

companyViewItem = new CompanyViewItem() { address = new Address { PermAddress = "pAdd", TempAddress = "tAdd" }, Employees = 15, Name = "name", Type = "abc" } 

Теперь вот мой AutoMapper код:

Mapper.CreateMap<CustomerViewItem, Customer>(); 
CustomerViewItem customerViewItem = GetCustomerViewItemFromDB(); 
Customer customer = Mapper.Map<CustomerViewItem,Customer>customerViewItem); 

Все работает нормально, но , только компания в возвращении null. Я тоже попробовал и наоборот, то же самое возвращает null. Может ли кто-нибудь помочь мне с этим?

+0

Вы используете 'Mapper.AssertConfigurationIsValid();'? Это * должно * улавливать несоответствия –

+0

Это не связано непосредственно с вашим вопросом, но я бы серьезно рекомендовал проверить «утиную типизацию» и «глину» в частности. По сути, это то, что «Automapper» делает под капотом («динамический прокси-подобный материал»), но вы можете пропустить все это безумие отображения. Производительность может быть медленнее или быстрее, это зависит от глубины и размера графика объекта (~ 1 миллион записей будет неэффективным, просто чтобы вы знали). – code4life

+0

@ Invent-Animate: я использовал это, оно выбрасывает исключение, которое гласит: «Следующие свойства для Клиента не отображаются: Компания Добавить настраиваемое выражение отображения, игнорировать или переименовать свойство в CustomerViewItem» – Vivek

ответ

1

Вы отсутствуют конфигурации отображения между CompanyViewItem и Company:

Mapper.CreateMap<CompanyViewItem, Company>(); 

Ваш код отображение должно быть что-то вроде:

// Setup 
Mapper.CreateMap<CustomerViewItem, Customer>() 
     .ForMember(dest => dest.company, opt => opt.MapFrom(src => src.companyViewItem)); 
Mapper.CreateMap<CompanyViewItem, Company>(); 

CustomerViewItem customerViewItem = GetCustomerViewItemFromDB(); 

// Mapping 
Customer customer = Mapper.Map<CustomerViewItem,Customer>(customerViewItem); 
+0

Привет. Я изменил код, как вы сказали. Но, компания все еще возвращает нуль, не знаю почему. – Vivek

+0

См. Мой обновленный ответ. Так как 'company' и' companyViewItem' имеют разные имена, вам нужно определить для них явное сопоставление. – rageit

+0

Yess !! Это действительно отлично работает !! Большое спасибо! – Vivek

Смежные вопросы