Automapper EF6动态代理
我们正在开发一个EF6 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