LINQ to SQL "cannot access disposed object" 异常

LINQ to SQL "cannot access disposed object" exception

当我尝试访问从数据库中检索到的 object 的 children 时,我的代码抛出异常。我正在使用 LINQ 到 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() 强制加载,但这感觉很老套。我有一种预感,主要问题之一是 .FirstOrDefault(),因为我尝试了很多不同的东西,甚至使用此代码 http://pastie.org/private/zzb01oeimkpelqz14gi7q that I got from this blog: https://eprystupa.wordpress.com/2009/11/26/linq-to-sql-tricks-building-efficient-queries-that-include-reference-data-or-child-entities/、运行 生成的 [=26] 使用投影生成了一个很好的连接=] 在 Microsoft SQL 服务器中产生了预期的结果,但在我 return 之后。但似乎有些东西正在丢弃我的数据而不是加载它。我的其他选择是完全以单独的方法 return children 。这看起来很愚蠢,因为我的项目中有很多其他方法,我可以在这些方法中获取一个实体,然后到达所有其他实体 children 而不会出现这些问题。

问题是您试图访问尚未加载的 属性,但在您已经处理了数据上下文之后。换句话说,在处理完与数据库的连接后,您将无法查询数据库。

您有几个解决方案。要么保持数据上下文存活更长时间,并继续延迟加载子项,要么您可以在初始查询期间使用 LoadWith 强制加载。