繁体   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