Entity Framework Core 的 .AsNoTracking():效能與追蹤
Entity Framework Core (EF Core) 提供 .AsNoTracking()
透過避免對檢索到的實體進行更改追蹤來提高效能。本文研究了當涉及不同的上下文實例時,使用 .AsNoTracking()
如何影響更新實體。
了解 EF Core 中的變更追蹤
EF Core 通常會追蹤從資料庫檢索的實體,監視變更以實現高效更新。 .AsNoTracking()
停用此功能,從而在未預期進行修改時提高效能。
場景:使用單獨的上下文檢索和更新
我們的場景涉及使用 .AsNoTracking()
檢索實體(例如使用者),然後使用不同的 EF Core 上下文更新它。
.AsNoTracking()
使用.AsNoTracking()
時,檢索到的實體將與上下文分離。 嘗試使用新上下文更新此實體不會自動觸發更新;上下文不會將其識別為現有記錄。 您必須手動將修改後的實體附加到新上下文,並明確將其狀態設為 EntityState.Modified
以指示需要更新。
省略.AsNoTracking()
相反,如果省略 .AsNoTracking()
,EF Core 將追蹤檢索到的實體。 使用不同上下文更新此實體將由 EF Core 自動處理,無需手動附加和狀態設定。
選出正確的方法
如果您確定實體不會被修改,則使用 .AsNoTracking()
可以提高效能。但是,如果需要更新,則省略 .AsNoTracking()
可以簡化更新過程,因為 EF Core 會自動處理追蹤。 選擇取決於您的特定需求以及效能提升是否超過手動更新處理所增加的複雜性。
以上是使用不同上下文實例時.AsNoTracking() 如何影響實體更新?的詳細內容。更多資訊請關注PHP中文網其他相關文章!