2014-02-20 52 views
11

我需要使用實體框架4.0將整個表加載到內存中。我花了最近2個小時閱讀關於AsNoTracking()方法,應該做的伎倆,但我不明白爲什麼該方法不可用我的dataContext。基於我讀過的所有內容,我只需要一個對System.Data.Entity的引用。然後,我應該能夠在加載我的對象時使用AsNoTracking()方法。我在這裏錯過簡單的東西嗎?這種方法在EF 4.0中不可用?儘管如此,下面是我的代碼中的一個查詢。AsNoTracking()方法從實體框架中的上下文丟失

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

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

System.Data.Entity的引用和我使用的實體框架4.0。我遇到的文檔並不清楚哪個版本開始支持此方法,因此可能是版本問題。 – Grasshopper

回答

6

AsNoTracking()是一個擴展方法,這是在實體框架4.1中加入(如以返回非緩存結果的能力)。這就是你在Entity Framework 4.0中沒有它的原因。如果可能的話,我建議你升級Entity Framework的版本(BTW當前版本是6.0)。

+1

根據[在EF 4.1第11部分中使用DbContext](http://blogs.msdn.com/b/adonet/archive/2011/02/05/using-dbcontext-in-ef-feature-ctp5-part-11 -load-and-asnotracking.aspx),'AsNoTracking()'在EF 4.1中可用。它比4.0還新,所以它可能不適用於OP,但似乎並沒有在EF5中添加。 – hvd

+0

@ hvd奇怪,MSDN只有EF 5版本文檔的這種方法.. –

+0

謝謝謝爾蓋。我會看看我們是否可以更新。而且,我會盡快接受你的回答。 – Grasshopper

9

AsNoTracking()是DbExtensions(EF5)/ QueryableExtensions(EF6)類中的擴展方法,它是System.Data.Entity命名空間的一部分。它不會從Entity Framework 4.1+中丟失。您只需要記住爲該名稱空間添加using指令。

using System.Data.Entity; 
+0

謝謝!這有所幫助。 –

+0

非常感謝:) – smoothumut

0

如果使用EF從.NET核心使用指令:

using Microsoft.EntityFrameworkCore;