Automapper,MapFrom和EF动态代理

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映射失败的情况.

有什么建议.

tom*_*ich 7

你的EF查询没有返回Gender,它返回一个代理,它可以在评估时为你获取性别,这不是AutoMapper构建一个映射来处理的类型.

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

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

  • 感谢您的建议.我接受了这个作为答案,但最终结果证明这是一个简单的错误.我创建了一个Bootstrap方法,其中包含AutoMapperConfigurator.Configure(),忘了在我的代码中调用该方法.:( (3认同)