我们首先开发EF6 Web项目代码。 在审查了我们项目的许多不同方法后,我们决定将我们的解决方案划分为这些项目:
在服务层,我们为每个需要发送到Web层的实体创建DTO。因此,我们从模型层获得实体,然后我们将这些实体转换为服务层中的DTO,并将这些DTO发送到Web层。 最后在Web层中,我们获得了这些DTO并将它们转换为我们在Views中使用的ModelView。
这样我们将所有图层分开,而Web图层并不了解我们的模型图层。
我们使用AUtoMapper进行实体的所有映射 - > DTOs-> ModelViews
我的问题是,AutoMapper在Web层中运行良好,因为它接收DTO对象并将其转换为ModelView对象。
问题在于我们的服务层是否正在接收DynamicPrixies对象而不是Entity对象,因此AUtoMapper给我们一个错误:
var myEntity = Dbset.FirstOrDefault(p => p.Id == id);
var myDto = Mapper.Map<LinkDto>(myEntity);
当然我们确实有适当的转换映射(我们尝试使用创建的Entity对象),我们无法设置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转换为Entity对象吗?
B)告诉AutoMapper读取那些DynamicProxies?