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

Posted

技术标签:

【中文标题】错误:“指定的 LINQ 表达式包含对与不同上下文关联的查询的引用”[重复]【英文标题】:Error: “The specified LINQ expression contains references to queries that are associated with different contexts” [duplicate] 【发布时间】: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 与什么? 【参考方案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 类的对象,错误是在同一个查询中使用不同的上下文类。顺便说一句,很高兴帮助。

以上是关于错误:“指定的 LINQ 表达式包含对与不同上下文关联的查询的引用”[重复]的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

(Linq/Lambda) 使用 2 个 DBContext 连接 2 个或更多表

远程服务器返回错误: 404错误远程服务器返回错误:500错误 HttpWebResponse远程服务器返回错误:(404500) 错误。

Pig 安装错误:错误 pig.Main:错误 2998:未处理的内部错误