更新:当前版本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能够引用当前的基础数据库上下文,这将是一个奖励)。
谢谢
修改
为了说清楚,这个计数将是动态的,因为还有其他标准来过滤先前的用户,我从简化的例子中省略了。