語言

ChangeTracker 類別

定義

提供存取變更追蹤資訊及相關情境所追蹤實體實例的操作。 這個類別的實例通常是從 ChangeTracker 應用程式中取得,且並非設計成直接在應用程式程式碼中建構。

public class ChangeTracker : Microsoft.EntityFrameworkCore.Infrastructure.IInfrastructure<Microsoft.EntityFrameworkCore.ChangeTracking.Internal.IStateManager>
[System.Runtime.CompilerServices.Nullable(0)]
public class ChangeTracker : Microsoft.EntityFrameworkCore.Infrastructure.IResettableService
public class ChangeTracker : Microsoft.EntityFrameworkCore.Infrastructure.IInfrastructure<Microsoft.EntityFrameworkCore.ChangeTracking.Internal.IStateManager>, Microsoft.EntityFrameworkCore.Infrastructure.IResettableService
public class ChangeTracker : Microsoft.EntityFrameworkCore.Infrastructure.IResettableService
type ChangeTracker = class
    interface IInfrastructure<IStateManager>
[<System.Runtime.CompilerServices.Nullable(0)>]
type ChangeTracker = class
    interface IResettableService
type ChangeTracker = class
    interface IInfrastructure<IStateManager>
    interface IResettableService
type ChangeTracker = class
    interface IResettableService
Public Class ChangeTracker
Implements IInfrastructure(Of IStateManager)
Public Class ChangeTracker
Implements IResettableService
Public Class ChangeTracker
Implements IInfrastructure(Of IStateManager), IResettableService
繼承
ChangeTracker
屬性
實作
IInfrastructure<Microsoft.EntityFrameworkCore.ChangeTracking.Internal.IStateManager> IResettableService

備註

更多資訊與範例請參閱 EF Core 變更追蹤 。

建構函式

名稱 Description
ChangeTracker(DbContext, IStateManager, IChangeDetector, IModel, IEntityEntryGraphIterator)

這是一個內部 API,支援 Entity Framework Core 基礎架構,且不受公開 API 相同的相容性標準約束。 該內容可能會在任何新聞稿中未經通知而更改或移除。 你應該只在程式碼中直接使用它,並且要非常謹慎,並且要知道這樣做可能會導致更新到新的 Entity Framework Core 版本時應用程式失敗。

ChangeTracker(DbContext)

此 API 支援 Entity Framework Core 基礎架構,並非設計用來直接從您的程式碼中使用。 此 API 可能會在未來版本中變更或移除。

ChangeTracker(IStateManager, IChangeDetector, IEntityEntryGraphIterator, DbContext)

此 API 支援 Entity Framework Core 基礎架構,並非設計用來直接從您的程式碼中使用。 此 API 可能會在未來版本中變更或移除。

屬性

名稱 Description
AutoDetectChangesEnabled

取得或設定一個值,指示該方法是否 DetectChanges() 會被相關類別的方法 DbContext 自動呼叫。

CascadeDeleteTiming

取得或設定一個值,指示當其父/主實體標記Deleted為 後,受依賴/子實體的狀態何時會被設定為 Deleted 。 預設值為Immediate。

Context

了解這個變更追蹤器所屬的背景。

DebugView

在除錯器中展開此屬性,即可讓人類能閱讀追蹤的實體。

警告:請勿依賴除錯字串的格式。 它們僅設計用於除錯,且在不同版本間可能任意變更。

更多資訊與範例請參閱 EF Core 變更追蹤 。

DeleteOrphansTiming

取得或設定一個值,表示當依賴/子實體從父/主實體切斷後,透過導覽或外鍵屬性設為空時,狀態會被設定為Deleted 預設值為 Immediate。

LazyLoadingEnabled

取得或設定一個值,指示是否會在首次存取時載入追蹤實體的導航屬性。

QueryTrackingBehavior

針對上下文執行的 LINQ 查詢,取得或設定追蹤行為。 關閉變更追蹤對於唯讀情境很有用,因為它避免了為每個實體實例設定變更追蹤的額外負擔。 如果你想操作實體實例並將變更持久化到資料庫 SaveChanges(),就不應該關閉變更追蹤。

方法

名稱 Description
AcceptAllChanges()

接受所有在上下文中對實體所做的變更。 假設追蹤的實體代表資料庫的當前狀態。 此方法通常在變更成功儲存到資料庫後被呼叫 SaveChanges() 。

CascadeChanges()

當子/受扶養實體從必須的父/主要實體中斷,或該必需的父/主要實體本身被刪除時,強制立即連鎖刪除。 參見 DeleteBehavior。

Clear()

停止追蹤所有目前被追蹤的實體。

DetectChanges()

掃描追蹤實體實例,偵測實例資料的任何變更。 DetectChanges() 通常在需要 up-to日期資訊(在返回變更追蹤資訊之前 SaveChanges() 及回傳時)會自動呼叫上下文。 通常只有在你已經停用 AutoDetectChangesEnabled時才需要呼叫這個方法。

Entries()

回傳每個被上下文追蹤的實體的 a EntityEntry 。 這些條目提供每個實體的變更追蹤資訊與操作存取權限。

Entries<TEntity>()

對於所有被上下文追蹤的某一類型實體,都會得到 一個 EntityEntry 。 這些條目提供每個實體的變更追蹤資訊與操作存取權限。

GetEntriesForState(Boolean, Boolean, Boolean, Boolean)

每個被上下文追蹤的實體都會得到 EntityEntry 一個,該上下文包含該狀態。 這些條目提供每個實體的變更追蹤資訊與操作存取權限。

GetEntriesForState<TEntity>(Boolean, Boolean, Boolean, Boolean)

對於具有該狀態的上下文追蹤的每個特定類型的實體,會得到 EntityEntry<TEntity> 一個。 這些條目提供每個實體的變更追蹤資訊與操作存取權限。

HasChanges()

檢查是否有新的、刪除或變更的實體被追蹤,使這些變更在被呼叫時SaveChanges()SaveChangesAsync(CancellationToken)會傳送到資料庫。

TrackGraph(Object, Action<EntityEntryGraphNode>)

開始追蹤一個實體及其可透過其導航屬性抵達的實體。 遍歷是遞迴的,因此任何發現的實體的導航屬性也會被掃描。 指定callback值會為每個發現的實體呼叫,並必須設定每個實體應該被追蹤的 。State 若未設定狀態,該實體將保持不被追蹤。

TrackGraph<TState>(Object, TState, Func<EntityEntryGraphNode,TState,Boolean>)

開始追蹤一個實體及其可達的實體,透過遍歷其導航屬性。 遍歷是遞迴的,因此任何發現的實體的導航屬性也會被掃描。 指定callback值會為每個發現的實體呼叫,並必須設定每個實體應該被追蹤的 。State 若未設定狀態,該實體將保持不被追蹤。

此方法設計用於斷開情境,即先用一個上下文實例檢索實體,然後在另一個上下文實例中儲存變更。 例如,一個網路服務中,一個服務呼叫從資料庫中擷取實體,另一個服務呼叫則持續存在實體的任何變更。 每個服務呼叫都會使用一個新的上下文實例,當通話結束時會被處置。

通常,當遇到已追蹤的實體或不該追蹤的實體時,圖表的遍歷應該停止。 針對這種典型行為,使用過載。TrackGraph(Object, Action<EntityEntryGraphNode>) 這種過載則讓回撥決定穿越何時結束,但責任落在呼叫者身上,確保穿越不會進入無限迴圈。

TrackGraph<TState>(Object, TState, Func<EntityEntryGraphNode<TState>,Boolean>)

開始追蹤一個實體及其可透過其導航屬性抵達的實體。 遍歷是遞迴的,因此任何發現的實體的導航屬性也會被掃描。 指定callback值會為每個發現的實體呼叫,並必須設定每個實體應該被追蹤的 。State 若未設定狀態,該實體將保持不被追蹤。

事件

名稱 Description
DetectedAllChanges

當偵測到實體圖有任何變更時,該事件會觸發,無論是透過明確呼叫 DetectChanges(),或是自動執行,例如SaveChanges()SaveChangesAsync(CancellationToken)執行的一部分。

DetectedEntityChanges

當偵測到單一實體有任何變更時,會觸發事件,無論是透過明確呼叫DetectChanges()或 DetectChanges(),或自動執行SaveChanges()SaveChangesAsync(CancellationToken),例如執行或 。

DetectingAllChanges

當偵測到實體圖即將發生變化時會觸發的事件,無論是透過明確呼叫 DetectChanges(),或是自動執行,例如執行的一部分SaveChanges()。SaveChangesAsync(CancellationToken)

DetectingEntityChanges

當偵測到單一實體變更即將發生時,事件即將發生,可能是透過明確呼叫或 DetectChanges()DetectChanges(),或自動觸發,例如執行SaveChanges()SaveChangesAsync(CancellationToken)或 。

StateChanged

當被關聯 DbContext 追蹤的實體從一個 EntityState 實體移動到另一個時,觸發的事件。

StateChanging

當被關聯 DbContext 追蹤的實體從一個 EntityState 實體移動到另一個時,觸發的事件。

Tracked

當一個實體被上下文追蹤時,該事件會觸發,無論是因為它從追蹤查詢中回傳,或是因為它被附加或新增到上下文中。

Tracking

當一個實體即將被上下文追蹤時觸發的事件,無論是因為它從追蹤查詢回傳,或是因為它被附加或新增到上下文中。

明確介面實作

名稱 Description
IInfrastructure<IStateManager>.Instance
已淘汰.

取得內部狀態管理器,用來儲存被追蹤實體的資訊。

此特性是為擴展方法所設計的。 它並非用於應用程式程式碼中。

IResettableService.ResetState()

重置服務,讓它能從池中使用。

IResettableService.ResetStateAsync(CancellationToken)

提供存取變更追蹤資訊及相關情境所追蹤實體實例的操作。 這個類別的實例通常是從 ChangeTracker 應用程式中取得,且並非設計成直接在應用程式程式碼中建構。

擴充方法

名稱 Description
GetInfrastructure<T>(IInfrastructure<T>)

從一個被隱藏的屬性中取得價值 IInfrastructure<T>。

此方法通常由資料庫提供者(及其他擴充)使用。 它通常不被用於應用程式程式碼中。

ToDebugString(ChangeTracker, ChangeTrackerDebugStringOptions, Int32)

建立給定元資料的可讀表示法。

警告:請勿依賴回傳字串的格式。 它僅設計用於除錯,且可能在不同版本間任意變動。

適用於