c# - 仅返回字段时使用 AsNoTracking() 会有所不同吗?

标签 c# linq entity-framework

所以我已经阅读了很多关于在 EF 中执行查询时使用 AsNoTracking() 的内容,特别是如果它返回实体,以便在您不更新时不要保留对事物的引用。

但我还读到 AsNoTracking 本身也可以加快查询速度,因为 EF 不必将查询的每个项目映射到 map 中的实体。

问题是,如果我的 Linq 查询只是从列/行返回值而不是实体类型,使用 AsNoTracking() 是否会对加快查询产生影响?如果不是很明显我不应该使用它,因为它只会使代码困惑?

示例 1(我希望使用 AsNoTracking():

var result = (from p in context.Pogs
              select p).AsNoTracking();

示例 2(我的问题......我认为在这里使用没有意义,但我不知道答案):

var result = (from p in context.Pogs
              select p.Name);  // assuming p.Name is a string or something

对比

var result = (from p in context.Pogs.AsNoTracking()
              select p.Name);

最佳答案

不,它不会,因为不会加载实体,检查 context.Pogs.Local 证明了这一点其中不包含通过 LINQ 检索其属性的实体。

您可以通过 DbContext.ChangeTracker 查看被跟踪的实体.因此,如果您检索 Pogs 的跟踪器条目 DbSet通过context.ChangeTracker.Entries<Pogs>()您会看到,对于您的第一个示例,有条目跟踪相应的实体,而对于第二个示例,则没有。

关于c# - 仅返回字段时使用 AsNoTracking() 会有所不同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21704224/

相关文章:

c# - 从数据库记录创建路由

c# - LINQ Except 将第一个集合的项目发送到 IEqualityComparer Equals 方法

c# - EntityFramework 在 SaveChanges() 之后获得更改/修改的属性

c# - 来自 c# WinApp 的 Mysql 数据库的存储过程

c# - Windows 10 移动版上的 SQLite 无法运行

c# - 如何在WPF中闪烁RichTextBox边框和背景色

c# - 如何使用 LINQ 删除列表中的最小值和最大值

C# 使用 linq 查找匹配两个元素级别的 xml 元素

c# - ASP.NET MVC 中的数据库上下文和返回动态结果集

c# - EF Code First : Duplicate foreign keys (one from name convention, 来自导航属性)