错误:“指定的LINQ表达式包含对与不同上下文关联的查询的引用”



当我尝试使用ASP.NET MVC获取所有部门名称的用户时,我会在此行中遇到此错误:

DepartmentName = db.Departments.Where(d => d.DepartmentId == u.DepartmentId).Select(n =>n.DepartmentName).ToString()

根据我在Google中搜索的内容,我认为我必须执行两个查询,但我不知道该怎么做。这是我的ViewModel

public class UserListViewModel
    {
        public string Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Email { get; set; }
        public string RoleName { get; set; }
        public string DepartmentName { get; set; }
    }

和动作

public ActionResult Users()
        {
            List<UserListViewModel> model = new List<UserListViewModel>();
            model = UserManager.Users.Select(u => new UserListViewModel
            {
                Id = u.Id,
                FirstName = u.FirstName,
                LastName = u.LastName,
                Email = u.Email,
               DepartmentName = db.Departments.Where(d => d.DepartmentId == u.DepartmentId).Select(n =>n.DepartmentName).ToString()
            }).ToList();

预先感谢您!

linq到实体查询被转换为SQL,并在SQL Server中执行,以上代码使用单个查询中的两个不同上下文实例,即UserManagerdb,框架framework die dim不允许在单个查询中具有两个不同的数据库上下文。

您可以在内存中分别获取UsersDepartments,然后在一个集合中组织它们,或者您需要使用相同的上下文查询数据(使用db用于UsersDepartments),然后您可以在单个请求中获取这两个结果到数据库服务器。

希望它有帮助。

相关内容

最新更新