[英]linq to sql Cannot access a disposed object. Returning a new created object
[英]LINQ to SQL “cannot access disposed object” exception
當我嘗試訪問從數據庫中檢索到的對象的子代時,我的代碼引發異常。 我正在使用LINQ to SQL。
using (var DC = new MyDataContext())
{
TimeSlot timeSlot = DC.TimeSlots
.Where(w => w.FacilityID == facilityID
.OrderByDescending(o => o.LoadDate)
.FirstOrDefault();
return timeSlot;
}
// Much later...
var slotChildren = timeSlot.children; // EXCEPTION!! Cannot access a disposed object.
我能夠做到這一點的唯一方法是通過使用timeSlotForDay.LMSTimeSlotHours.Load()
強制加載,但是感覺很timeSlotForDay.LMSTimeSlotHours.Load()
。 我直覺主要問題之一是.FirstOrDefault()
因為我嘗試了許多不同的事情,甚至使用從此博客獲得的代碼http://pastie.org/private/zzb01oeimkpelqz14gi7q使用投影產生了很好的連接: https : //eprystupa.wordpress.com/2009/11/26/linq-to-sql-tricks-building-efficiency-queries-that-include-reference-data-or-child-entities/ ,運行生成的SQL在Microsoft SQL Server中產生了預期的結果,但是我返回之后。 但是似乎有些東西正在丟棄我的數據,而不是加載它。 我的其他選擇是完全通過單獨的方法返回孩子。 但是,這似乎很愚蠢,因為我的項目中還有很多其他方法,我可以抓住一個實體,然后聯系所有其他孩子而不會遇到這些問題。
問題是您正在嘗試訪問尚未加載的屬性,但是在您已經處理完數據上下文之后。 換句話說,在處理與數據庫的連接之后,您將無法查詢數據庫。
您有幾個解決方案。 要么保持數據上下文的生存期更長,然后繼續延遲加載子級,要么可以在初始查詢期間使用LoadWith強制加載。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.