问题 AsNoTracking()方法在实体框架中缺少上下文


我需要使用Entity Framework 4.0将整个表加载到内存中。我花了最后2个小时阅读AsNoTracking()方法应该做的伎俩但是,我无法弄清楚为什么这个方法在我的dataContext上不可用。基于我读过的所有内容,我只需要对System.Data.Entity的引用。然后,我应该能够在加载我的对象时使用AsNoTracking()方法。我错过了一些简单的东西吗?这种方法在EF 4.0中不可用吗?不过,下面是我的代码中的一个查询。

// Working Query
var items = dbContext.Items.ToList()

// Does NOT Work (Compiler does not recognize AsNoTrackingMethod() )
var items = dbContext.Items.AsNoTracking().ToList()

2809
2018-02-20 20:12


起源

引用了System.Data.Entity,我正在使用Entity Framework 4.0。我遇到的文档不清楚哪个版本开始支持这种方法,所以可能是版本问题。 - Grasshopper


答案:


AsNoTracking() 是一种扩展方法,它是在Entity Framework 4.1中添加的(作为返回非缓存结果的能力)。这就是为什么你没有在Entity Framework 4.0中拥有它。我建议您升级Entity Framework的版本,如果可能的话(BTW当前版本是6.0)。


6
2018-02-20 20:16



根据 在EF 4.1 Part 11中使用DbContext, AsNoTracking() 可在EF 4.1中使用。它仍然比4.0更新,因此OP可能无法使用,但它似乎没有在EF5中添加。
@hvd奇怪,MSDN只有这个方法的EF 5版本文档.. - Sergey Berezovskiy
谢谢谢尔盖。我会看看我们是否可以更新。而且,一旦SO让我,我会接受你的回答。 - Grasshopper
在EF5之前,MSDN可能没有EF文档吗? (诚​​实的问题,我不确定。)
@hvd是的,你是对的 - 这个方法是在4.1版本中添加的文章状态 一种新的扩展方法AsNoTracking允许以这种方式运行任何查询 - Sergey Berezovskiy


AsNoTracking()是DbExtensions中的扩展方法(EF5)/ QueryableExtensions(EF6)class,它是System.Data.Entity命名空间的一部分。实体框架4.1+并未遗漏。您只需要记住为该命名空间添加using指令。

using System.Data.Entity;

9
2018-05-16 17:07



谢谢!这有帮助。 - Varun Rathore
非常感谢 : ) - smoothumut


如果从.NET Core使用EF使用指令:

using Microsoft.EntityFrameworkCore;

0
2017-11-21 20:09