自动映射器不从存储过程设置导航属性值

时间:2015-02-21 09:20:06

标签: c# entity-framework entity-framework-6 automapper

我的Customer.Model有一个导航属性:

public Address Address { get; set; }

我有一个存储过程,其选择如下所示:

 SELECT 
     c.*, 
     a.City AS AddressCity, 
     a.State AS AddressState

这些值最终出现在EF6自动生成的复杂对象中:

Customer_GetCustomers_Result

在我的AutoMapper配置中,我有:

CreateMap<Customer_GetCustomers_Result, Model.Customer>();

在我的存储库中,我有:

public IEnumerable<Model.Customer> GetCustomers()
{
    var cList = context.Customer_GetCustomers();
    return Mapper.Map<List<Model.Customer>>(cList);
}

cList最终属于Customer_GetCustomers_Result类型,因此AutoMapper会将其转换为Model.Customer并返回,以便我的应用可以使用它。

有人告诉我,如果遵循该命名约定,AutoMapper将自动设置Customer.Address.CityCustomer.Address.State。我错过了什么?

1 个答案:

答案 0 :(得分:0)

您提及的是flattening。但事实恰恰相反。 AutoMapper可以将Customer.Address.City映射到属性Target.AddressCity,但不能反过来。它必须创建一个Address对象并仅设置其City属性,然后记住,对于第二个映射,应使用相同的Address

过多的错综复杂和边缘情况需要参与一个应该做一个简单工作的工具。

相关问题