C# Entity Framework查詢小技巧 NoTracking


在使用Entity Framework做查詢的時候,如果只需要顯示,而不用保存實體,那么可以用AsNoTracking()來獲取數據。

這樣可以提高查詢的性能。

代碼如下:

var context = new Entities(connectStr);
var contentlist = context.Set<Content>().AsQueryable().AsNoTracking();
  

但是如果取到數據后,要對數據做修改並保存,則無法反映到數據庫里。

如:

var context = new Entities(connectStr);
var contentlist = context.Set<Content>().AsQueryable().AsNoTracking();

var content = contentlist.Where(o => o.Id == 18).FirstOrDefault();
content.Id = 19;
context.SaveChanges();

雖然修改后對數據庫進行了Commit,再次讀取后發現這條數據的Id還是18。

 

另外如果對通過AsNoTracking得到的數據做刪除處理,則會報錯。

如:

var context = new Entities(connectStr);
var contentlist = context.Set<Content>().AsQueryable().AsNoTracking();

var content = contentlist.Where(o => o.Id == 18).FirstOrDefault();
context.Set<Content>().Remove(content);
context.SaveChanges();

執行后會拋出System.InvalidOperationException異常,

原因是:オブジェクトは ObjectStateManager 內に見つからなかったため削除できません。

中文意思是:因為無法在ObjectStateManager中找到對象,所以無法刪除。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM