簡體   English   中英

LINQ to SQL“無法訪問已處置的對象”異常

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM