【问题标题】:Automapper not setting navigation property values from stored procedureAutomapper 未从存储过程设置导航属性值
【发布时间】:2015-02-21 09:20:06
【问题描述】:

我的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。我错过了什么?

【问题讨论】:

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


    【解决方案1】:

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

    对于一个应该做简单工作的工具来说,涉及的复杂性和极端情况太多了。

    【讨论】:

    • 因此,使用 Entity Framework 6 和存储过程对我来说并不适用,因为最终我希望我的模型具有该属性。如果它不是我的模型,那将是我的视图模型。任何其他建议只是为了从我的数据层(自动生成的 ef6 dbfirst 层)到我的模型层(poco 层)到我的 Web 层,并将 proc 结果到模型?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 2016-07-19
    • 2023-01-26
    • 2010-11-02
    • 2013-11-30
    • 1970-01-01
    • 2012-12-05
    相关资源
    最近更新 更多