自动映射MapFrom子查询

时间:2015-06-16 16:20:26

标签: entity-framework automapper

更新:当前版本https://github.com/AutoMapper/AutoMapper/issues/742

中已修复问题

使用AutoMapper 3.3,QueryableExtensions和EF6

我有一个用户要求返回在当前用户之前创建的其他用户的计数。

我有以下

1

最后是实际的映射:

public class User 
   {
       public int Id {get;set;}
       public string Name { get; set; }
       public DateTime? DateActivated {get;set;}
   }

public class UserViewModel
   {
       public int Id {get;set;}
       public string Name { get; set; }
       public DateTime? DateActivated {get;set;}
       public int position {get;set;}
   }

public class AutoMapperConfig
{
    public static void ConfigAutoMapper() {

        var db = new DB();

        Mapper.CreateMap<User, UserViewModel>()
            .ForMember(a => a.position, opt => opt.MapFrom(src => db.Users.Where(u => u.DateActivated < src.DateActivated).Count()));

        Mapper.AssertConfigurationIsValid();
    }
}

db是一个本地DbContext变量,我使用AutoMapper参数将其插入映射器(https://github.com/AutoMapper/AutoMapper/wiki/Queryable-Extensions#parameterization

到目前为止很好,这个编译并运行,但user.position的结果是0

我使用sql profiler进行了检查,这是生成的查询的相关部分:

user = db.Users.Project().To<T>(new { db = db }).FirstOrDefault(a => a.id == id);

注意它在比较的两边是如何引用Extent4.DateActivated的,这显然会产生0结果。

我正在做的事情是不可能的?或者我做错了什么。

(如果我可以取消参数化并让automapper能够引用当前的基础数据库上下文,这将是一个奖励)。

谢谢

修改

为了说清楚,这个计数将是动态的,因为还有其他标准来过滤先前的用户,我从简化的例子中省略了。

0 个答案:

没有答案