EF Core 的 .AsNoTracking()
和資料庫寫入:澄清
Entity Framework Core (EF Core) 提供 .AsNoTracking()
透過停用變更追蹤來最佳化查詢。 當您只需要讀取資料並且不打算在當前上下文中修改它時,這非常有用。 但對後續更新的影響需要慎重考慮。
您的範例突顯了一個常見的困惑點:
場景: 使用每個請求上下文,首先使用 .AsNoTracking()
檢索用戶,然後嘗試更新相同用戶。
第 1 步: context.Set<user>().AsNoTracking()
檢索使用者 而不進行 追蹤。
第 2 步: context.Set<user>()
嘗試更新未追蹤的使用者。
關鍵區別:
使用 .AsNoTracking()
和不使用
.AsNoTracking()
沒有 :
.AsNoTracking()
對於:實體不context.Entry(user).State = EntityState.Modified;
被追蹤。 EF Core 不知道您所做的變更。 若要更新資料庫,您必須在呼叫 context.SaveChanges()
之前使用
.AsNoTracking()
簡而言之,.AsNoTracking()
為唯讀操作提供了效能提升。 對於更新操作,要么避免在初始檢索中使用
以上是更新實體時 EF Core 的 `.AsNoTracking()` 是否會影響資料庫寫入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!