Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “LINQ到SQL”;无法访问已处置对象“;例外_C#_Asp.net_Sql Server_Linq To Sql_Linq To Objects - Fatal编程技术网

C# “LINQ到SQL”;无法访问已处置对象“;例外

C# “LINQ到SQL”;无法访问已处置对象“;例外,c#,asp.net,sql-server,linq-to-sql,linq-to-objects,C#,Asp.net,Sql Server,Linq To Sql,Linq To Objects,当我试图访问从数据库检索到的对象的子对象时,我的代码引发异常。我正在使用LINQtoSQL using (var DC = new MyDataContext()) { TimeSlot timeSlot = DC.TimeSlots .Where(w => w.FacilityID == facilityID .OrderByDescending(o => o.LoadDate) .FirstOrDefault(); return tim

当我试图访问从数据库检索到的对象的子对象时,我的代码引发异常。我正在使用LINQtoSQL

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()
,因为我尝试了许多不同的方法,甚至使用我从本博客获得的代码使用投影生成了一个很好的连接:,在Microsoft SQL Server中运行生成的SQL会产生预期的结果,但在我返回之后。但似乎有什么东西在丢弃我的数据,而不是加载数据。我的另一个选择是用一种完全不同的方法返回孩子们。这看起来很傻,因为我的项目中有很多其他方法,我可以抓住一个实体,然后接触到所有其他子实体,而不会出现这些问题。

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


你有几个解决方案。要么让数据上下文保持较长时间的活动状态,然后继续延迟加载子项,要么可以在初始查询期间使用强制加载

对。我明白在我处理上下文后无法访问数据。我也读了大约10篇关于变通方法的博客。在LINQ to Entities中,我有Include,但在LINQ to SQL中不存在。另外,调用parent.children.Load()与使用DataLoadOptions()有什么区别吗?使用DataLoadOptions和LoadWith()将在加载父实体时加载子实体,只需一次访问数据库。在之后执行Load()将发出第二个请求以获取数据。性能方面,最好同时加载它们。