My Customer.Model
has a navigation property:
public Address Address { get; set; }
I have a stored procedure that has a select that looks like the following:
SELECT
c.*,
a.City AS AddressCity,
a.State AS AddressState
These values end up in a complex object that EF6 auto generates:
Customer_GetCustomers_Result
In my AutoMapper config I have:
CreateMap<Customer_GetCustomers_Result, Model.Customer>();
In my Repository I have:
public IEnumerable<Model.Customer> GetCustomers()
{
var cList = context.Customer_GetCustomers();
return Mapper.Map<List<Model.Customer>>(cList);
}
cList
ends up being of type Customer_GetCustomers_Result
so AutoMapper converts it to Model.Customer
and returns so my app can use it.
I was told AutoMapper will automatically set Customer.Address.City
and Customer.Address.State
if I followed that naming convention. What am I missing?
Your referring to what's called flattening. But it's the other way around. AutoMapper can map Customer.Address.City
to a property Target.AddressCity
, but not the reverse. It would have to create an Address
object and only set its City
property, and then keep in mind that for the second mapping the same Address
should be used.
Just too many intricacies and edge cases to get involved in for a tool that's supposed to do a straightforward job.