2017-11-25 117 views
-4

當我嘗試獲取屬於它們的部門名稱的所有用戶時,使用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(); 

預先感謝您!

+2

'UserManager'和'db'是兩個不同的上下文。嘗試移動查詢中的「DepartmentName」選項以獲取用戶 - 只需在擁有用戶標識後獲取。 – Dido

+0

@Dido感謝您的迴應,但我怎樣才能獲取用戶和部門分開,你能告訴我嗎?我嘗試之前像這樣DepartmentName = db.Departments.Where(d => d.DepartmentId == ?????)。Select(n => n.DepartmentName).ToString(),但d => d.DepartmentId with什麼? –

回答

1

的LINQ到實體的查詢被轉換到SQL和它得到在SQL服務器執行時,上述代碼在單個查詢中使用兩種不同的上下文實例即UserManagerdb和框架不允許具有兩個不同的數據庫的上下文在一個查詢中。

可以分別在存儲器中取出UsersDepartments,然後在一個收集整理,或者您需要使用相同的上下文來查詢數據(使用db兩個UsersDepartments),然後就可以取單兩個結果請求數據庫服務器。

希望它有幫助。

+0

感謝您的回覆,但我怎樣才能獲取用戶和部門,你能告訴我嗎?我嘗試之前像這樣DepartmentName = db.Departments.Where(d => d.DepartmentId == ?????)。Select(n => n.DepartmentName).ToString(),但d => d.DepartmentId with什麼? –

+0

第二種方法更適合您的使用情況使用相同的上下文類將允許您使用您當前擁有的查詢獲取,我的意思是使用'db'對象'用戶'和'部門' –

+0

謝謝我真的不要知道爲什麼我使用上下文而不是數據庫。現在它正在使用數據庫。 –

相關問題