And*_*rew 2 c# entity-framework automapper
我一直在尝试将我的域对象映射到报表视图模型.在测试我伪造实体框架代码并使用构建器返回完全填充的pocco对象时,一切都运行良好.现在我实际上正在访问数据库并返回数据,我看到一些奇怪的动态代理类型错误.
以下是我的代码示例:
public class ContactMapping : Profile
{
protected override void Configure()
{
Mapper.CreateMap<Contact, ReportRowModel>()
.ForMember(dest => dest.Gender, opt => opt.MapFrom(src => src.Gender.Name));
}
}
Run Code Online (Sandbox Code Playgroud)
映射代码如下:
var contact = GetContactFor(clientPolicy);
Mapper.DynamicMap(contact, rowModel);
return rowModel;
Run Code Online (Sandbox Code Playgroud)
除了rowModel.Gender
返回System.Data.Entity.DynamicProxies.Gender_3419AAE86B58120AA2983DA212CFFEC4E42296DA14DE0836B3E25D7C6252EF18 的字段外,所有联系人字段都正确填充.
我已经看到人们在使用Map而不是DynamicMap时遇到问题的解决方案,但我没有发现任何.ForMember映射失败的情况.
有什么建议.
你的EF查询没有返回Gender,它返回一个代理,它可以在评估时为你获取性别,这不是AutoMapper构建一个映射来处理的类型.
您需要在查询中急切地获取性别,或者使用AutoMapper的IQueryable Extention的Project方法让AutoMapper发出匿名投影(同样在您的查询中),而不是在从您的结果返回结果后尝试应用AutoMapping EF上下文.
一般来说,这是避免选择N + 1问题的良好做法.
归档时间: |
|
查看次数: |
8363 次 |
最近记录: |