【问题标题】:Error: “The specified LINQ expression contains references to queries that are associated with different contexts” [duplicate]错误:“指定的 LINQ 表达式包含对与不同上下文关联的查询的引用”[重复]
【发布时间】:2018-05-09 10:43:12
【问题描述】:

当我尝试使用他们所属的部门名称获取所有用户时,使用 ASP.Net MVC 我在这一行中不断收到此错误:

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

根据我在谷歌搜索的内容,我认为我必须执行两个查询,但我不知道该怎么做。 这是我的视图模型

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();

提前谢谢你!

【问题讨论】:

  • UserManagerdb 是两个不同的上下文。尝试将 DepartmentName 选择从查询中移出以获取用户 - 只需在获得用户 ID 后获取它。
  • @Dido 感谢您的回复,但是我怎样才能分别获取用户和部门,您能告诉我吗?我之前尝试过 Like this DepartmentName = db.Departments.Where(d => d.DepartmentId == ?????).Select(n =>n.DepartmentName).ToString() ,但是 d => d.DepartmentId 与什么?

标签: c# asp.net-mvc linq


【解决方案1】:

linq to entity 查询被翻译成 sql 并在 sql server 中执行,上面的代码在单个查询中使用了两个不同的上下文实例,即 UserManagerdb,并且框架不允许有两个单个查询中的不同数据库上下文。

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

希望对你有帮助。

【讨论】:

  • 感谢您的回复,但是我怎样才能分别获取用户和部门,您能告诉我吗?我之前尝试过 Like this DepartmentName = db.Departments.Where(d => d.DepartmentId == ?????).Select(n =>n.DepartmentName).ToString() ,但是 d => d.DepartmentId 与什么?
  • 第二种方法更适合您的用例,使用相同的上下文类将允许您使用当前拥有的查询进行获取,我的意思是对 UsersDepartments 都使用 db 对象
  • 谢谢我真的不知道为什么我使用上下文而不是数据库。现在它正在使用 db。
  • db 实际上是 DbContext 类的对象,错误是在同一个查询中使用不同的上下文类。顺便说一句,很高兴帮助。
猜你喜欢
  • 2011-11-12
  • 2021-11-12
  • 2011-07-30
  • 1970-01-01
  • 2016-12-02
  • 2011-10-24
相关资源
最近更新 更多