错误:“指定的 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();
提前谢谢你!
【问题讨论】:
UserManager
和 db
是两个不同的上下文。尝试将 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 中执行,上面的代码在单个查询中使用了两个不同的上下文实例,即 UserManager
和 db
,并且框架不允许有两个单个查询中的不同数据库上下文。
您可以在内存中分别获取Users
和Departments
,然后将它们组织到一个集合中,或者您需要使用相同的上下文来查询数据(db
用于Users
和Departments
)然后您可以在对数据库服务器的单个请求中获取这两个结果。
希望对你有帮助。
【讨论】:
感谢您的回复,但是我怎样才能分别获取用户和部门,您能告诉我吗?我之前尝试过 Like this DepartmentName = db.Departments.Where(d => d.DepartmentId == ?????).Select(n =>n.DepartmentName).ToString() ,但是 d => d.DepartmentId 与什么? 第二种方法更适合您的用例,使用相同的上下文类将允许您使用当前拥有的查询进行获取,我的意思是对Users
和 Departments
都使用 db
对象
谢谢我真的不知道为什么我使用上下文而不是数据库。现在它正在使用 db。
db
实际上是 DbContext
类的对象,错误是在同一个查询中使用不同的上下文类。顺便说一句,很高兴帮助。以上是关于错误:“指定的 LINQ 表达式包含对与不同上下文关联的查询的引用”[重复]的主要内容,如果未能解决你的问题,请参考以下文章
错误:“指定的 LINQ 表达式包含对与不同上下文关联的查询的引用”[重复]
(Linq/Lambda) 使用 2 个 DBContext 连接 2 个或更多表
远程服务器返回错误: 404错误远程服务器返回错误:500错误 HttpWebResponse远程服务器返回错误:(404500) 错误。