2013-02-25 106 views
4

我爲我的MVC4項目使用實體框架5.0。這有一個問題。當我給任何視圖分貝模型,控制器發送模型沒有關係ASP.NET MVC實體框架關係綁定

例如;

我有User類,並與相關部門

當我控制器使用它

using(context) 
{ 
    var user = context.Find(id); 
    string department = user.Department.Name; 
} 

其工作時的呼叫上下文。但是,當我這樣做

using(context) 
{ 
    var user = context.Find(id); 
    return View(user); 
} 

,並考慮如下調用

Model.Department.Name 

我得到的錯誤。

這裏是我的答案,但它不是好

using(context) 
{ 
    var user = context.Find(id); 
    string department = user.Department.Name; 
    return View(user); 
} 

當我嘗試用戶Model.Department.Name鑑於我沒有錯誤,當我使用類爲模型我必須這樣做,對於每一種關係。這個問題有更好的解決方案嗎?我想在視圖中使用所有關係而不用在控制器中調用這些關係

我希望你能理解我,對不起我的英語。

+0

你有什麼錯誤? – gustavodidomenico 2013-02-25 12:44:57

+0

「ObjectContext實例已被處置,不能再用於需要連接的操作。」它的錯誤,我可以修復它與控制器的調用關係,但我不想要所有的時間都打電話給他們所有的時間應該有一個綁定功能或東西 – alim 2013-02-25 12:54:34

+0

你試過,而不是Model.Department.Name有Model.User在視圖? – idipous 2013-02-25 12:59:55

回答

1

在你的DbContext您可以使用.Include方法來急切地加載你需要的關係:

context.Users.Include(u => u.Department).FirstOrDefault(u => u.Id == id); 

,或者如果您使用的是舊版本的實體框架的這種方法可能無法使用的通用版本:

context.Users.Include("Department").FirstOrDefault(u => u.Id == id); 
+0

好吧,我得到了Darin,這是另一個關於這個問題。我有老版本5.0 EEF。還有另一個關係,如 var alluserInYourDepartment = User.Department.Users; 包含方法包括它呢? :) – alim 2013-02-25 13:20:51

1

原因是您沒有在您的原始代碼中「加載」該部門。由於您的上下文被封裝在using語句中,因此在創建視圖之前它將被丟棄,因此您的用戶對象缺少所需的數據。

在第二個代碼示例中,您已專門調用相關的Department對象,因此它現在存在於User對象中。

你需要急於負荷系在原有線路使用類似

context.User.Include(c => c.Department).Find(id); 

現在你的用戶對象應在針對這一可用。

+0

這裏是另一個關於這個問題。我有老版本5.0 EEF。還有另外一個關於var alluserInYourDepartment = User.Department.Users;那Include方法包括它呢? :) – alim 2013-02-25 13:21:44

+0

沒有看到更多的代碼,很難提供幫助。我想你需要了解EF如何工作。假設您的模型具有正確的導航屬性(因此您的部門有一個公共ICollection 用戶{get; set;}屬性),那麼您應該能夠按照您的建議使用User.Department.Users從部門獲取所有用戶給定用戶。我已經在這裏嘗試了一個非常簡單的測試,它沒有進一步包含。 – 2013-02-26 09:00:08

+0

mvc3-4? ef 4.0或5.0或6.0您使用哪一個? – alim 2013-02-26 11:39:37

1

你想完成什麼?列出具有一個或多個部門的用戶的視圖?

+0

不,我覺得我有車輛,車輛要求,車輛申請批准。當我想查看車輛請求詳細信息時,查看 我應該看到哪個用戶做了什麼像用戶一樣被批准的用戶b取消用戶c沒有響應。所以我必須爲每個請求做到這一點。批准 批准.User.Username這樣的,所以它的意思是包括沒有enougth – alim 2013-02-25 13:37:45