Automapper EF6动态代理

我们正在开发一个EF6 Web项目代码。 在审查了我们项目的很多不同方法后,我们决定将我们的解决方案分成这些项目:

  • “Model”项目包含EF DataContext和所有实体
  • “服务”项目与所有登录,调用实体检索数据并将DTO中的数据发送到Web项目。
  • “Web”项目,视图模型,控制器和视图。
  • 在服务层中,我们为每个需要发送到Web层的实体创建DTO。 因此,我们从模型层获得实体,然后将这些实体转换为服务层中的DTO,并将这些DTO发送到Web层。 最后在Web层中,我们获得这些DTO并将它们转换为我们在Views中使用的ModelView。

    通过这种方式,我们分离了所有图层,而Web层并不知道我们的模型图层。

    我们使用AUtoMapper来处理Entities-> DTOs-> ModelViews的所有映射

    我的问题是,AutoMapper在Web层完美工作,因为它接收一个DTO对象并将其转换为ModelView对象。

    问题是在我们的服务层bacuse中,我们正在接收DynamicPrixies对象而不是实体对象,所以AUtoMapper给我们提供了一个错误:

    var myEntity = Dbset.FirstOrDefault(p => p.Id == id); 
    var myDto = Mapper.Map<LinkDto>(myEntity);
    

    当然,我们确实有适合该转换的映射(我们已经使用创建的实体对象进行了尝试),并且我们无法设置ProxyCreationEnabled = false,因为我们在查询中使用了延迟加载。

    我们正在使用AutoMapper(5.0.2)的最新版本,我们正在创建这样的地图:

    在Global.asax中

    Mapper.Initialize(
      cfg => {
                    cfg.AddProfile(new AutoMapperWebProfile());
                    cfg.AddProfile(new AutoMapperServiceProfile());
                    cfg.IgnoreUnmapped(); 
             });
    
     Mapper.AssertConfigurationIsValid();
    

    在Web项目中,我们拥有该项目的简介以及Service项目中的其他简介:

    public AutoMapperServiceProfile()
    {
        CreateMap<LinkDto, Link>().ReverseMap();
    }
    

    有没有解决方法:

    A)将查询生成的DynamicProxy转换为实体对象?

    B)告诉AutoMapper读取这些DynamicProxy?

    链接地址: http://www.djcxy.com/p/37431.html

    上一篇: Automapper EF6 Dynamic Proxy

    下一篇: IEnumerable and nested collections