- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我注意到可以通过三种不同的方式禁用跟踪:
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.
换句话说,如果查询返回实体并且没有AsNoTracking
或 AsTracking
在查询表达式树中调用 anywhere,查询使用 ChangeTracker.QueryTrackingBehavior
的值.
所以你的问题的答案是肯定的,你可以通过对最终查询的一次调用或通过 ChangeTracker
实现相同的效果。 .
不过有一点需要注意,文档中没有解释。如果查询表达式树包含多个AsNoTracking
/AsTracking
调用,最后 调用优先。这意味着通过添加 AsNoTracking
或者如果您添加 AsTracking
最终查询将控制它的行为,而不管任何内部跟踪行为调用或 ChangeTracker
属性(property)。
关于c# - AsNoTracking 上下文属性、查询或 ChangeTracker?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52400940/
本来我也这么认为 context.Configuration.AutoDetectChangesEnabled = false; 将禁用更改跟踪。但不是。目前,我需要在所有 LINQ 查询(对于我的只
我正在尝试使用这段代码从数据库中删除一行 public ListPicture GetPicture(string Id) { ListPicture pic = Pictures.AsNoTra
我正在处理一个大型项目(有许多不同的厨师制作汤,多年来过去了)并且刚刚发现了以下代码。 private IEnumerable SomeSome() { using(DataModel conte
我有一个关于 .AsNoTracking() 扩展的问题,因为这是全新的而且非常困惑。 我正在为网站使用按请求上下文。 我的很多实体都没有改变,所以不需要跟踪,但我有以下场景,我不确定数据库中有什么,
我有一个 Linq 查询来获取一个实体及其一些导航属性。 context.MyEntity .AsNoTracking() .Include(i=> i.Nav1) .Incl
我有一个关于 .AsNoTracking() 扩展的问题,因为这是全新的而且非常困惑。 我正在为网站使用按请求上下文。 我的很多实体都没有改变,所以不需要跟踪,但我有以下场景,我不确定数据库中有什么,
我需要来 self 的数据库的未经编辑的项目列表。它运行缓慢,所以我试图加快速度。 所以我将 AsNoTracking 添加到 LINQ 查询中,它运行得更慢了! 以下代码平均耗时 7.43 秒。 A
我正在将查询从 Linq-to-Sql 迁移到 EF。为了使禁用跟踪更难忘记,在 Linq-To-Sql 中,我编写了一个 ConfigureForQuery 包装函数,它只是将 ObjectTrac
抱歉我的英语不好 - 我在 WPF (.net 4.5) 应用程序中使用 EF 5 (Code First)。每个窗口都有自己的上下文。 我有一个这样的模型(为简洁起见省略了代码): public c
我想知道 Entity Framework 是否可以实现以下场景: 我想用选项 AsNoTracking 加载几个表,因为它们都像用户无法更改的静态表。 那些表也恰好是其他人的导航属性。到目前为止,我
所以我已经阅读了很多关于在 EF 中执行查询时使用 AsNoTracking() 的内容,特别是如果它返回实体,以便在您不更新时不要保留对事物的引用。 但我还读到 AsNoTracking 本身也可以
我有这样的实现: var query = this.DbContext.Set(); if (includeProperties != null && includeProperties.Any())
下面是我从数据库中获取信息的查询。从性能的角度来看,我想使用 AsNoTracking我的实体上的方法。 var teamrole = (from role in _context.USERROLEs
我已经设置了模拟数据库集,它读取一堆 json 文件并将它们反序列化为模拟数据库集。我将 AsNoTracking 添加到我的变量中有两个原因:1) 我将在数据库中存储一个新对象,并且不需要在更新条目
我有一个从大部分只读数据库中提取的 EF5 Code First 项目,因此我对绝大多数查询使用 .AsNoTracking() 以提高性能。 不过我很好奇:我有许多导航属性,有时了解它们是否已经加载
我有兴趣在我的 LINQ 选择查询中使用 AsNoTracking 来提高性能。我将 Entity Framework 5 与 Code First 结合使用。 但是,我的所有查询都是使用 LINQ
如何在查询 EF 上下文时将 Find() 与 AsNoTracking() 结合使用,以防止跟踪返回的对象。这是我做不到的 _context.Set().AsNoTracking().Find(i
我注意到可以通过三种不同的方式禁用跟踪: 通过上下文属性上的 AsNoTracking 在执行最终查询之前通过 AsNoTracking 通过 context.ChangeTracker.QueryT
在下面的片段中,我尝试使用 Anonymous Projection 获取数据,我不想跟踪获取的 entities。 注意:我已经解决了现有的堆栈问题,但无法为我找到有效的解决方案 using (va
我们目前正在为 Entity Framework 使用延迟加载并遇到内存不足异常。我们遇到此异常的原因是因为 Linq 查询加载了大量数据,并且在后期使用延迟加载来加载导航属性。但是因为我们不使用 N
我是一名优秀的程序员,十分优秀!