代码之家  ›  专栏  ›  技术社区  ›  Seth Petry-Johnson

Linq to SQL:是否将ObjectTrackingEnabled设置为FalseBreaks?是否延迟加载子实体?

  •  21
  • Seth Petry-Johnson  · 技术社区  · 16 年前

    有没有一种方法可以禁用Linq的对象跟踪功能,而不同时禁用惰性加载的子关联?

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

    例如,假设两个表小部件和类别之间存在FK关系。启用了对象跟踪, widgetInstance.category 正确的延迟加载。禁用对象跟踪后,不会延迟加载任何内容,并且Category属性始终为空。

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

    更新: 这里是 a link to the MSDN page 由答案引用。进一步的研究也发现我可以使用 LoadWith 对子数据进行预加载。在我的例子中,我只需要数据,所以非常渴望加载是可以的。

    1 回复  |  直到 16 年前
        1
  •  15
  •   liggett78    16 年前

    根据msdn:

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

    ObjectTrackingEnabled=false。 已忽略DeferredLoadingEnabled,并且 推断为错误。这种行为 对应于只读 数据结构。

    ObjectTrackingEnabled=true。 deferredloadingabled=false。这个 情况对应于数据上下文 允许用户加载对象 使用loadWith指令绘制图形, 但是它不能延迟 加载。

    两者都设置为真。这就是 违约。

    您要么启用对象跟踪并分离实体(这是可行的,因为您正在运行测试,我猜,否则分离另一个实体的每个实体都会很麻烦…),要么使用dataloadOptions.loadWith()或associateWith()急切地加载关系。