代码之家  ›  专栏  ›  技术社区  ›  feemurk

Linq DeferredLoadingEnabled和DataLoadOptions关系

  •  2
  • feemurk  · 技术社区  · 15 年前

    我遇到了一个障碍,它会自行下降到下面描述的情况。我在回答我以前的问题时没有得到太多帮助,(我认为我必须学会更好地安排他们),但我希望有人至少能向我解释这一点(我是Linq的新手,到目前为止还没有机会深入阅读)。

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

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

    解决办法 设置 ObjectTrackingEnabled = false 在DataContext上。

    问题2: 现在,对象不能延迟加载-在调试期间检查给定对象中的所有实体时,它们都是空的。

    解决办法: 集合 DeferredLoadingEnabled = false 在DataContext上。

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

    解决办法: 显式配置DataContext的LoadOptions,并通过设置手动标识每个关联的实体 LoadWith<Object>(o => o.entity1) , LoadWith<Object>(o => o.entity2) LoadWith<Object>(o => o.entityN) .

    有人能帮我克服缓存问题而不必处理其余的问题吗?

    如果没有,有人能告诉我是否有另一种方法可以在数据上下文上设置即时可获取(或类似的方法),这样我就不必显式地声明 全部的 与关联的实体 全部的 我的域中的对象?

    我非常感谢你的反馈。如果我问的问题没有足够的信息,或者你想举个例子,请告诉我!

    提前谢谢!

    1 回复  |  直到 15 年前
        1
  •  1
  •   Frans Bouma    15 年前

    不能对Web应用程序使用单个上下文,因为Web应用程序是多线程的(例如,每个请求一个线程),这意味着多个线程使用相同的上下文。I.O.W.:您应该使用一个系统,在其中为每个数据请求创建一个新的上下文,并使用该上下文执行查询,然后释放上下文。