【问题标题】:Mapping flattened stored proc values to navigation property将展平的存储过程值映射到导航属性
【发布时间】:2015-04-23 12:15:47
【问题描述】:

这是我的存储过程,它返回一种 Customer_GetCustomers_Result:

SELECT c.*, a.City AS AddressCity, a.State AS AddressState
FROM Customer c
LEFT OUTER JOIN Address a ON c.AddressId = a.Id

当使用 AutoMapper 从 Customer_GetCustomers_Result 映射到 Model.Customer (POCO) 时,我希望 AddressCity 和 AddressState 映射到 Customer.Address.City 和 Customer.Address.State。

我认为使用这个命名约定我不必在我的 AutoMapper 配置中添加任何特殊的东西,除了:

CreateMap<Customer_GetCustomers_Result, Model.Customer>();

我愿意做任何事情来从我的存储过程中获取要映射的导航属性。有什么想法吗?

【问题讨论】:

    标签: sql entity-framework mapping entity-framework-6 automapper


    【解决方案1】:

    你可以使用AfterMap:

    Mapper.CreateMap<Customer_GetCustomers_Result, Model.Customer>()
        .AfterMap((s,t) => 
        {
            t.Address = new Address { 
                                        City = s.AddressCity, 
                                        State = s.AddressState
                                    };
        });
    

    或者甚至定义第二个映射...

    Mapper.CreateMap<Customer_GetCustomers_Result, Address>()
        .ForMember(t => t.City, m => m.MapFrom(s => s.AdressCity))
        .ForMember(t => t.State, m => m.MapFrom(s => s.AdressState))
    

    然后……

    Mapper.CreateMap<Customer_GetCustomers_Result, Model.Customer>()
        .AfterMap((s,t) => 
        {
            t.Address = Mapper.Map<Address>(s);
        });
    

    【讨论】:

    • 这两个都很好用。你刚刚为我节省了很多时间。您更喜欢哪种技术?为什么需要 AfterMapping?
    • 我想我更喜欢第二种方法,尤其是。如果你打算在更多地方这样做。 AfterMap 是唯一可以在源仍然可用的情况下修改初始映射结果的地方。
    猜你喜欢
    • 2020-09-22
    • 1970-01-01
    • 2021-11-24
    • 2021-11-19
    • 1970-01-01
    • 2015-12-04
    • 2018-09-15
    • 1970-01-01
    • 2013-12-12
    相关资源
    最近更新 更多