0

更多来自我的 LINQ 问题,真是令人惊讶。

所以现在,我正在开发一个使用内部 SQLite 数据源的网站。我正在使用 LINQ-To-SQL 来与它“交谈”,利用实体框架。现在,假设我有一个复杂的对象。这个对象里面包含一个 List,它又映射了一个一对多的关系。

ParentObject {
    Integer Id
    List<RelatedObject> RelatedObjects
    string SomeField
}
RelatedObject {
    Integer Id
    ParentObject Parent
    NestedObject Nested
    string SomeField
}
NestedObject {
    Integer Id
    RelatedObject Parent
    string SomeField
}

现在这是我无法更改的数据库结构。假设我在页面加载的上下文中执行查询:

var results = context.ParentObjects.Where(parent => parent.SomeField == AnotherField).ToList();

据我所知,使用ToList()将“强制”linq 在那里然后执行查询,使我们不必担心延迟执行。所以,这样做是安全的:

result = results.First();

(由于 if() 语句,结果定义在 results() 之外的范围内)。

现在这工作正常,直到我尝试执行一个扩展方法,它这样做:

// Assume this is an extension method on ParentObject
return this.RelatedObjects.Where(related => this.SomeField == related.SomeField).Select(related.Nested).First();

(当我试图解释它时非常复杂)

然后我们得到一个异常,因为创建“this”(ParentObject)的 DataContext 已被释放。

我的问题是,如何在上下文结束后访问List<RelatedObject> RelatedObjects里面的字段?ParentObject

4

1 回答 1

0

我很笨。

我忘记在上下文中禁用延迟加载。

public Context()
{
    this.Configuration.LazyLoadingEnabled = false;
于 2013-10-22T19:28:04.743 回答