Automapper,MapFrom和EF动态代理

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

以下是我的代码示例:

public class ContactMapping : Profile { protected override void Configure() { Mapper.CreateMap() .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查询没有返回Gender,它返回一个代理,它可以在评估时为你获取性别,这不是AutoMapper构建一个映射来处理的类型。

您需要在查询中急切地获取性别,或者使用AutoMapper的IQueryable Extention的Project方法让AutoMapper发出匿名投影(同样在您的查询中),而不是在从您的结果返回结果后尝试应用AutoMapping EF背景。

一般来说,这是避免选择N + 1问题的良好做法。

我现在用版本4.x得到了同样的问题,恢复到3.3.1修复了这个问题。