错误:“指定的LINQ表达式包含对与不同上下文关联的查询的引用”
当我尝试获取属于它们的部门名称的所有用户时,使用ASP.Net MVC我不断收到此错误:错误:“指定的LINQ表达式包含对与不同上下文关联的查询的引用”
DepartmentName = db.Departments.Where(d => d.DepartmentId == u.DepartmentId).Select(n =>n.DepartmentName).ToString()
从我在谷歌搜索,我想我必须执行两个查询,但我不知道该怎么做。 这是我的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服务器执行时,上述代码在单个查询中使用两种不同的上下文实例即UserManager
和db
和框架不允许具有两个不同的数据库的上下文在一个查询中。
可以分别在存储器中取出Users
和Departments
,然后在一个收集整理,或者您需要使用相同的上下文来查询数据(使用db
两个Users
和Departments
),然后就可以取单两个结果请求数据库服务器。
希望它有帮助。
感谢您的回复,但我怎样才能获取用户和部门,你能告诉我吗?我尝试之前像这样DepartmentName = db.Departments.Where(d => d.DepartmentId == ?????)。Select(n => n.DepartmentName).ToString(),但d => d.DepartmentId with什么? –
第二种方法更适合您的使用情况使用相同的上下文类将允许您使用您当前拥有的查询获取,我的意思是使用'db'对象'用户'和'部门' –
谢谢我真的不要知道为什么我使用上下文而不是数据库。现在它正在使用数据库。 –
'UserManager'和'db'是两个不同的上下文。尝试移动查询中的“DepartmentName”选项以获取用户 - 只需在拥有用户标识后获取。 – Dido
@Dido感谢您的回应,但我怎样才能获取用户和部门分开,你能告诉我吗?我尝试之前像这样DepartmentName = db.Departments.Where(d => d.DepartmentId == ?????)。Select(n => n.DepartmentName).ToString(),但d => d.DepartmentId with什么? –