【发布时间】:2015-03-13 20:40:15
【问题描述】:
当我尝试访问从数据库中检索到的对象的子对象时,我的代码抛出异常。我正在使用 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() 强制加载,但这感觉很糟糕。我有一种预感,主要问题之一是.FirstOrDefault(),因为我尝试了许多不同的事情,甚至使用我从这个博客获得的代码http://pastie.org/private/zzb01oeimkpelqz14gi7q 使用投影生成了一个很好的连接:https://eprystupa.wordpress.com/2009/11/26/linq-to-sql-tricks-building-efficient-queries-that-include-reference-data-or-child-entities/,运行生成的 SQL在 Microsoft SQL Server 中产生了预期的结果,但在我返回之后。但似乎有些东西正在丢弃我的数据而不是加载它。我的其他选择是完全以单独的方法返回孩子。虽然这看起来很愚蠢,因为我的项目中有很多其他方法,我可以抓住一个实体,然后在没有这些问题的情况下联系所有其他孩子。
【问题讨论】:
标签: c# asp.net sql-server linq-to-sql linq-to-objects