我一直在尝试将域对象映射到报表视图模型。在测试中一切都很顺利,我伪造了实体框架代码并使用构建器返回完全填充的 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;
联系人字段均已正确填充,除了rowModel.Gender
返回 System.Data.Entity.DynamicProxies.Gender_3419AAE86B58120AA2983DA212CFFEC4E42296DA14DE0836B3E25D7C6252EF18 的字段
我见过人们使用 Map 而不是 DynamicMap 时遇到问题的解决方案,但我还没有发现 .ForMember 映射像这样失败的任何情况。
有什么建议。
您的 EF 查询不会返回性别,而是返回一个代理,该代理可以在评估时为您获取性别,这不是 AutoMapper 构建映射来处理的类型。
您要么需要在查询中急切地获取性别,要么使用AutoMapper IQueryable 扩展 https://github.com/AutoMapper/AutoMapper/wiki/Queryable-Extensions的 Project 方法让 AutoMapper 发出匿名投影(同样在您的查询中),而不是在从 EF 上下文返回结果后尝试应用 AutoMapping。
一般来说,这是避免 Select N+1 问题的良好实践。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)