首頁 >後端開發 >C++ >更新實體時 EF Core 的 `.AsNoTracking()` 是否會影響資料庫寫入?

更新實體時 EF Core 的 `.AsNoTracking()` 是否會影響資料庫寫入?

Susan Sarandon
Susan Sarandon原創
2025-01-09 13:11:40172瀏覽

Does EF Core's `.AsNoTracking()` Affect Database Writes When Updating Entities?

EF Core 的 .AsNoTracking() 和資料庫寫入:澄清

Entity Framework Core (EF Core) 提供 .AsNoTracking() 透過停用變更追蹤來最佳化查詢。 當您只需要讀取資料並且不打算在當前上下文中修改它時,這非常有用。 但對後續更新的影響需要慎重考慮。

您的範例突顯了一個常見的困惑點:

場景: 使用每個請求上下文,首先使用 .AsNoTracking() 檢索用戶,然後嘗試更新相同用戶。

第 1 步: context.Set<user>().AsNoTracking() 檢索使用者 而不進行 追蹤。

第 2 步: context.Set<user>() 嘗試更新未追蹤的使用者。

關鍵區別:

使用 .AsNoTracking() 和不使用

之間的主要區別在於 EF Core 如何管理實體的狀態。
  • .AsNoTracking()沒有

    EF Core 追蹤實體。 當您更新並儲存時,EF Core 會自動偵測變更並相應地更新資料庫。 如果您打算修改實體,這是更簡單、更直接的方法。
  • .AsNoTracking()對於實體context.Entry(user).State = EntityState.Modified;被追蹤。 EF Core 不知道您所做的變更。 若要更新資料庫,您必須在呼叫 context.SaveChanges() 之前使用

    將實體明確附加到上下文。 如果不這樣做,可能會導致插入新記錄而不是更新現有記錄。

.AsNoTracking()簡而言之,.AsNoTracking() 為唯讀操作提供了效能提升。 對於更新操作,要么避免在初始檢索中使用

,要么準備在保存變更之前手動管理上下文中實體的狀態。 選擇取決於您的特定需求以及您是否優先考慮效能或更簡單的程式碼。

以上是更新實體時 EF Core 的 `.AsNoTracking()` 是否會影響資料庫寫入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn