gpt4 book ai didi

c# - AsNoTracking 上下文属性、查询或 ChangeTracker?

转载 作者:太空狗 更新时间:2023-10-29 20:26:28 25 4
gpt4 key购买 nike

我注意到可以通过三种不同的方式禁用跟踪:

  • 通过上下文属性上的 AsNoTracking
  • 在执行最终查询之前通过 AsNoTracking
  • 通过 context.ChangeTracker.QueryTrackingBehavior

如果我想禁用对所有内容的跟踪,这三种方法之间有什么区别吗?

如果我之前在每个上下文属性之后使用了 AsNoTracking,现在我只用对最终查询的一次调用替换它(或通过 ChangeTracker 禁用它),它会不会效果一样吗?

最佳答案

AsNoTracking AsTracking IQueryable<T> 的扩展方法, 因此与查询的状态而不是特定实体相关联(它们在 DbSet<T> 级别可用的事实只是因为它实现了 IQueryable<T> ) - 注意 all 里面的词方法说明:

无跟踪

Returns a new query where the change tracker will not track any of the entities that are returned.

追踪

Returns a new query where the change tracker will keep track of changes for all entities that are returned.

两者都说:

The default tracking behavior for queries can be controlled by QueryTrackingBehavior.

换句话说,如果查询返回实体并且没有AsNoTrackingAsTracking在查询表达式树中调用 anywhere,查询使用 ChangeTracker.QueryTrackingBehavior 的值.

所以你的问题的答案是肯定的,你可以通过对最终查询的一次调用或通过 ChangeTracker 实现相同的效果。 .

不过有一点需要注意,文档中没有解释。如果查询表达式树包含多个AsNoTracking/AsTracking调用,最后 调用优先。这意味着通过添加 AsNoTracking或者如果您添加 AsTracking最终查询将控制它的行为,而不管任何内部跟踪行为调用或 ChangeTracker属性(property)。

关于c# - AsNoTracking 上下文属性、查询或 ChangeTracker?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52400940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com