当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《LINQtoSQL:将ObjectTrackingEnabled设置为false会破坏子实体的延迟加载?》经验,为你挑选了1个好方法。

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

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

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

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

更新:这是答案引用的MSDN页面的链接.进一步的研究发现我可以使用LoadWith来切换加载子数据.在我的情况下,我只想要数据,所以急切的加载是好的.



1> liggett78..:

根据MSDN:

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

ObjectTrackingEnabled = false.DeferredLoadingEnabled被忽略并推断为false.此行为对应于只读DataContext.

ObjectTrackingEnabled = true.DeferredLoadingEnabled = false.这种情况对应于一个DataContext,它允许用户使用LoadWith指令加载对象图,但它不支持延迟加载.

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

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

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有