【问题标题】:AsNoTracking() Method Is Missing From Context in Entity Framework实体框架中的上下文中缺少 AsNoTracking() 方法
【发布时间】:2014-02-20 20:12:17
【问题描述】:

我需要使用 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()

【问题讨论】:

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

标签: c# winforms entity-framework


【解决方案1】:

如果使用 .NET Core 中的 EF 使用指令:

using Microsoft.EntityFrameworkCore;

【讨论】:

    【解决方案2】:

    AsNoTracking() 是 DbExtensions (EF5)/QueryableExtensions (EF6) 类中的扩展方法,它是 System.Data.Entity 命名空间的一部分。 Entity Framework 4.1+ 并没有缺少它。您只需要记住为该命名空间添加 using 指令。

    using System.Data.Entity;
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 根据Using DbContext in EF 4.1 Part 11AsNoTracking() 在 EF 4.1 中可用。它仍然比 4.0 更新,因此它可能对 OP 不可用,但它似乎没有添加到 EF5 中。
      • 谢谢谢尔盖。我看看能不能更新而且,我会尽快接受你的回答。
      • MSDN 可能在 EF5 之前根本没有 EF 文档吗? (诚​​实的问题,我不确定。)
      • @hvd 是的,你是对的 - 如文章所述,此方法是在 4.1 版本中添加的 新的扩展方法 AsNoTracking 允许以这种方式运行任何查询
      • 出于好奇,你们知道是否有另一种方法可以使用 EF 4.0 加载一堆对象,可以直接附加到不同的上下文以进行插入?我基本上需要使用一个上下文在一个数据库中加载一个表,然后右转并使用不同的 dbContext 将记录插入到另一个数据库表中。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      相关资源
      最近更新 更多