gpt4 book ai didi

c# - AsNoTracking() 背后是否有任何隐藏功能?

转载 作者:行者123 更新时间:2023-11-30 16:05:53 24 4
gpt4 key购买 nike

我正在处理一个大型项目(有许多不同的厨师制作汤,多年来过去了)并且刚刚发现了以下代码。

private IEnumerable<string> SomeSome()
{
using(DataModel context = DataModel())
{
context.SomeEntityName.AsNoTracking();
...
return context.SomeEntityName
.Where(entity => true)
.Select(entity => String.Empty);
}
}

现在,我已经对 AsNoTracking 方法和 it's clearly said 进行了三次检查返回与 EF 的跟踪工具无关的可查询对象。可以这么说,对于 ORM 来说,这是一种“即发即弃”。

注意到:

  1. 我们不存储返回者的值(value),也不对返回者的内容做任何事情
  2. 我们获得了一组新的(显然是可跟踪的)对象来处理

我想删除该行。但是,出于谦虚(即不怕破坏系统),我在删除任何内容之前都很谨慎。我的上下文中是否存在任何可能影响实体第二次检索的隐式更改?

我没有找到任何关于它的信息——无论是支持还是反对该理论。此外,我还没有找到 EF 5.0 以外的任何其他版本的文档(如上面的链接所示),但我们使用的是 EF 6.1.3,我知道所讨论的方法也存在于 EF 4 中。

最佳答案

如果那行代码与您的项目中的完全一样,则没有任何变化。

context.SomeEntityName.AsNoTracking();

这个 ^^^ 返回未保存在任何地方的可查询对象。如果您删除该行,则该行的查询将没有任何区别。

更新我查看了 EF 的源代码。据我所知,AsNoTracking() 不会更改您正在使用的 DbContext 对象的状态。因此,如果在一个查询上调用此方法,它应该不会影响其他查询的执行。如果是 - 这是 EF 中的错误,应该报告。在我的项目的多个地方,我有相同的 dbContext 查询,有跟踪和没有跟踪。一切都按预期进行。

来源:

关于c# - AsNoTracking() 背后是否有任何隐藏功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33019911/

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