我對.AsNoTracking()擴展名有疑問,因為這都是很新的,也很令人困惑。我正在為網站使用每個請求的上下文。我的許多實體都不會更改,因此不需要跟蹤,但是在以下情況下,我不確定數據庫的內容,甚至在這種情況下是否會有所不同。這個例子是我目前正在做的:context.Set<User>().AsNoTracking()// Step 1) Get usercontext.Set<User>()// Step 2) Update user與上面相同,但是.AsNoTracking()從步驟1中刪除了:context.Set<User>();// Step 1) Get usercontext.Set<User>()// Step 2) Update user步驟1和步驟2使用相同的上下文,但發生在不同的時間。我無法解決的是是否有任何區別。由于第2步是更新,因此我猜兩者都將兩次訪問數據庫。誰能告訴我有什么區別?
3 回答

達令說
TA貢獻1821條經驗 獲得超6個贊
參見本頁實體框架和AsNoTracking
AsNoTracking會做什么
實體框架公開了許多性能調整選項,以幫助您優化應用程序的性能。這些調整選項之一是.AsNoTracking()。通過這種優化,您可以告訴您Entity Framework不要跟蹤查詢結果。這意味著Entity Framework不對查詢返回的實體執行任何其他處理或存儲。但是,這也意味著您必須先將這些實體重新附加到跟蹤圖上,才能更新它們。
使用AsNoTracking可以顯著提高性能

守候你守候我
TA貢獻1802條經驗 獲得超10個贊
沒有跟蹤LINQ到實體查詢
當您的查詢用于讀取操作時,建議使用AsNoTracking()。在這些情況下,您可以取回您的實體,但是它們不會被您的上下文跟蹤。這可以確保最少的內存使用和最佳性能
優點
與常規LINQ查詢相比,性能得到了提高。
完全物化的對象。
使用編程語言內置的語法最簡單地編寫。
缺點
不適合CUD操作。
某些技術限制,例如:與Entity SQL中的簡單OUTER JOIN語句相比,對OUTER JOIN查詢使用DefaultIfEmpty的模式所導致的查詢更為復雜。
您仍然不能將LIKE與常規模式匹配一起使用。
- 3 回答
- 0 關注
- 1666 瀏覽
添加回答
舉報
0/150
提交
取消