使用 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
字段?
我很傻。
我忘了在上下文中禁用延迟加载。
public Context()
{
this.Configuration.LazyLoadingEnabled = false;