gpt4 book ai didi

c# - Automapper、MapFrom 和 EF 动态代理

转载 作者:行者123 更新时间:2023-11-30 19:39:57 26 4
gpt4 key购买 nike

我一直在尝试将我的域对象映射到报 TableView 模型。在我伪造 Entity Framework 代码并使用构建器返回一个完全填充的 pocco 对象的测试中,一切都运行良好。现在我实际上正在访问数据库并返回数据,我看到了一些奇怪的动态代理类型错误。

这是我的代码示例:

public class ContactMapping  : Profile
{
protected override void Configure()
{
Mapper.CreateMap<Contact, ReportRowModel>()
.ForMember(dest => dest.Gender, opt => opt.MapFrom(src => src.Gender.Name));

}

}

映射代码是这样的:

var contact = GetContactFor(clientPolicy);
Mapper.DynamicMap(contact, rowModel);
return rowModel;

除了返回 System.Data.Entity.DynamicProxies.Gender_3419AAE86B58120AA2983DA212CFFEC4E42296DA14DE0836B3E25D7C6252EF18 的 rowModel.Gender 字段外,联系人字段均已正确填充

我见过人们在使用 Map 而不是 DynamicMap 时遇到问题的解决方案,但我还没有发现 .ForMember 映射会像这样失败。

任何建议。

最佳答案

您的 EF 查询不返回性别,它返回一个代理,该代理可以在评估时为您获取性别,这不是 AutoMapper 构建的映射要处理的类型。

您要么需要在查询中急切获取 Gender,要么使用 AutoMapper's IQueryable Extention的 Project 方法让 AutoMapper 发出匿名投影(同样,在您的查询中),而不是在从 EF 上下文返回结果后尝试应用 AutoMapping。

这通常是避免选择 N+1 问题的良好做法。

关于c# - Automapper、MapFrom 和 EF 动态代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25507228/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com