我有一个包含EF Dbcontext和实体的DAL层。我有一个服务,其中包含一个方法,其中我想从逻辑层执行一个简单的Select。
层: Logic=>DalService=>DbContext.DbSet.Select(something)
DAL不知道任何DTO模型。逻辑层不知道任何实体。
我基本上是在尝试将:Func<T, dynamic>选择器转换为Func<TEntity, dynamic>选择器,我基本上可以在DbSet<TEntity>上使用它。
谢谢
发布于 2017-09-27 18:48:39
AutoMapper有一个名为Expression Translation的功能,可以完成从逻辑层查询到DAL查询的转换工作。
首先,您需要设置从TEntity (DAL中的实体类型)到T (逻辑层中的DTO )的映射:
Mapper.Initialize(cfg => cfg.CreateMap<TEntity, T>());然后,当您的DAL从逻辑层获得一个查询表达式时,如下例所示:
Expression<Func<DTO, dynamic>> logicExpression = (dto) => new { dto.SomeProperty }; 它可以这样翻译它:
var dalExpression = Mapper.Map<Expression<Func<TEntity, dynamic>>>(logicExpression);最后根据您的EF上下文调用:
var results = context.SomeSet.Select(dalExpression).ToList();https://stackoverflow.com/questions/46445542
复制相似问题