Linq to sql LINQ to SQL:将ObjectTrackingEnabled设置为false会中断子实体的延迟加载?

Linq to sql LINQ to SQL:将ObjectTrackingEnabled设置为false会中断子实体的延迟加载?,linq-to-sql,Linq To Sql,有没有一种方法可以禁用LINQ的对象跟踪功能,而不禁用延迟加载的子关联 我正在一组集成测试中使用LINQ2SQL。我只使用LINQ来验证数据库中的更改,所以我希望它像一个简单的数据访问层,而不是一个完整的ORM。为此,我将数据上下文的ObjectTrackingEnabled属性设置为false,以防止LINQ缓存数据。这很好,只是它打破了实体之间的关联 例如,假设有两个表WIDGET和CATEGORY,它们之间有FK关系。启用对象跟踪后,widgetInstance.CATEGORY已正确加载

有没有一种方法可以禁用LINQ的对象跟踪功能,而不禁用延迟加载的子关联

我正在一组集成测试中使用LINQ2SQL。我只使用LINQ来验证数据库中的更改,所以我希望它像一个简单的数据访问层,而不是一个完整的ORM。为此,我将数据上下文的ObjectTrackingEnabled属性设置为false,以防止LINQ缓存数据。这很好,只是它打破了实体之间的关联

例如,假设有两个表WIDGET和CATEGORY,它们之间有FK关系。启用对象跟踪后,widgetInstance.CATEGORY已正确加载。禁用对象跟踪后,不会延迟加载任何内容,并且CATEGORY属性始终为null

如何防止LINQ缓存数据,同时又不防止延迟加载

更新:以下是答案引用的内容。进一步的研究还发现,我可以使用它来快速加载子数据。在我的情况下,我只需要数据,因此快速加载是可以的。

根据MSDN:

延迟加载需要对象 追踪。只有以下三个 模式有效:

ObjectTrackingEnabled=false。 DelferredLoadingEnabled被忽略,并且 推断为错误的。这种行为 对应于只读 数据上下文

ObjectTrackingEnabled=true。 DelferredLoadingEnabled=false。这 情境对应于数据上下文 它允许用户加载对象 通过使用LoadWith指令绘制图形, 但它不能启用延迟 装载

两者都设置为true。这是 默认

您要么必须启用对象跟踪和分离实体(我想这是可行的,因为您正在运行测试,否则分离另一个实体的每个实体会非常麻烦……),要么使用DataLoadOptions.LoadWith()或AssociateWith()来急切地加载关系