使用 Linq-To-SQL,如何确保在复杂类型上强制执行

本文关键字:复杂 类型 强制执行 确保 Linq-To-SQL 何确保 使用 | 更新日期: 2023-09-27 18:36:31

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

所以现在,我正在开发一个使用内部SQLite数据源的网站。我正在使用 LINQ-To-SQL 来利用实体框架与它"对话"。现在,假设我有一个复杂的对象。此对象内部包含一个 List,而 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已被释放。

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

使用 Linq-To-SQL,如何确保在复杂类型上强制执行

我很傻。

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

public Context()
{
    this.Configuration.LazyLoadingEnabled = false;