2012-11-04 36 views
1

我在EntityFramework中檢索我的項目實體時遇到了一些問題。它不斷給我的Objest實例一直處置錯誤。對象實例已處理(EF)

我有2個實例,如下圖所示。 enter image description here

而下面的代碼給我的錯誤:從項目

public Project GetProjectyById(int id) 
    { 
     using (var context = new CoderaDBEntities()) 
     { 
      return context.Projects.First(c => c.Id == id); 
     } 
    } 

一切都被檢索罰款,但在工程對象(協會)內部的範疇對象發送我已經配置錯誤的對象。這是怎麼回事?

謝謝!

編輯:這個協會看起來很奇怪嗎?

+0

*「這個關聯對你來說看起來有點奇怪嗎?」 - 你的關係狀態1類別可以與許多項目相關聯,或者以其他方式表示,每個項目只能有1個類別。對我來說似乎是合理的 - 規則應該是什麼? – James

回答

4

當DBContext對象已經被處置時(使用using語句包裝它將在它超出作用域時將其丟棄),您嘗試使用Lazy Loading訪問與類別相關的對象。 延遲加載是EF只在代碼中請求相關實體時加載相關實體的時間。

爲了避免這種情況,你應該明確將其包含語句加載相關對象:

return context.Projects.Include("Category").First(c => c.Id == id); 

或者你可以在一個強類型的方式如下加載這一點,但一定要加上「使用System.Data。實體; 「參考

return context.Projects.Include(x => x.Category).First(c => c.Id == id); 

另一種方法是通過在使用語句如下未包裹的DbContext對象以允許延遲加載。

public Project GetProjectyById(int id) 
    { 
     var context = new CoderaDBEntities() 
     return context.Projects.First(c => c.Id == id);  
    } 
+0

哦,上帝..我忘了:我提醒自己記住這一點,但stil忘了它:(謝謝柔道! – Mittchel

+0

順便說一下..該協會看起來是否正確嗎?因爲我也可以使1個類別實例與多個項目實例(永遠不會發生,但仍然) – Mittchel

+0

我不太確定數據的結構,但如果項目應該只有一個類別和幾個項目可以在同一類別下,這是正確的。如果項目可以有多個類別,那麼多對多的關係將是最好的 – Judo