LINQ to SQL:将ObjectTrackingEnabled设置为false会破坏子实体的延迟加载?

时间:2008-10-15 20:07:43

标签: linq-to-sql

有没有办法禁用LINQ的对象跟踪功能,而不禁用延迟加载的子关联?

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

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

如何在不阻止延迟加载的情况下阻止LINQ缓存数据?

更新:这是答案引用的a link to the MSDN page。进一步的研究发现我可以使用LoadWith来加载子数据。在我的情况下,我只想要数据,所以急切加载就好了。

1 个答案:

答案 0 :(得分:15)

根据MSDN:

  

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

     

ObjectTrackingEnabled = false。   DeferredLoadingEnabled被忽略   推断是假的。这种行为   对应于只读   DataContext的。

     

ObjectTrackingEnabled = true。   DeferredLoadingEnabled = false。这个   情境对应于DataContext   允许用户加载对象   使用LoadWith指令绘制图形,   但它不会启用延期   负荷。

     

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

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