LINQ DeferredLoadingEnabled& DataLoadOptions关系

时间:2009-05-21 06:20:31

标签: linq-to-sql

我有一个路障,已经下降到下面描述的情况。对于回答我之前的问题的人,我没有多少帮助,(我想我必须学会更好地构建它们)但我希望有人至少可以向我解释这一点(我是LINQ的新手并且还没有还没有机会在很长的时间内阅读它。)

我正在使用存储库模型通过LINQ-to-SQL访问数据。我试图使用声明为公共静态的1个数据上下文,以便我总是使用相同的上下文。

问题1:网页在保存更改后立即加载缓存值。更改已传播到db,但datacontext正在吐出对象的缓存副本。

解决方法:在datacontext上设置ObjectTrackingEnabled = false

问题2:现在,对象无法延迟加载 - 当我在调试期间检查它们时,给定对象中的所有实体都为null。

解决方法:在datacontext上设置DeferredLoadingEnabled = false

问题3: LINQ不会自动为与给定对象关联的所有实体设置立即加载。

解决方法:明确配置datacontext的LoadOptions,并通过设置LoadWith<Object>(o => o.entity1)LoadWith<Object>(o => o.entity2),...,LoadWith<Object>(o => o.entityN)来手动识别每个关联的实体。

有些人可以帮我解决缓存问题,而不必处理剩下的问题吗?

如果没有,有人可以告诉我是否有另一种方法在数据上下文中设置ImmediateLoadingEnabled(或类似的东西),这样我就不必明确说明所有的加载选项与我域中所有对象相关联的实体?

我真的很感激一些反馈。如果我在没有足够信息的情况下提问,或者您想要一个例子,请告诉我!

提前谢谢!

1 个答案:

答案 0 :(得分:1)

您不能将单个上下文用于Web应用程序,因为Web应用程序是多线程的(例如,每个请求1个线程),这意味着多个线程使用相同的上下文。 I.o.w。:您应该使用一个系统,对于每个数据请求,您创建一个新的上下文并使用它来执行查询,然后处理上下文。