语言

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 更改跟踪 。

构造函数

名称 说明
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 可能会在将来的版本中更改或删除。

属性

名称 说明
AutoDetectChangesEnabled

获取或设置一个值,该值指示方法是否 DetectChanges() 由方法 DbContext 和相关类自动调用。

CascadeDeleteTiming

获取或设置一个值,该值指示在父/主体实体被标记为Deleted后,依赖/子实体的状态设置为Deleted何时。 默认值为<

Context

获取此更改跟踪器所属的上下文。

DebugView

在调试器中展开此属性,以获取要跟踪的实体的可读视图。

警告:不依赖于调试字符串的格式。 它们仅用于调试,可以在发布之间任意更改。

有关详细信息和示例,请参阅 EF Core 更改跟踪 。

DeleteOrphansTiming

获取或设置一个值,该值指示依赖/子实体何时通过 Deleted 导航或外键属性设置为 null 从父/主体实体切断状态。 默认值为 Immediate。

LazyLoadingEnabled

获取或设置一个值,该值指示是否在首次访问时加载跟踪实体的导航属性。

QueryTrackingBehavior

获取或设置针对上下文运行的 LINQ 查询的跟踪行为。 禁用更改跟踪对于只读方案很有用,因为它避免了为每个实体实例设置更改跟踪的开销。 如果要操作实体实例并将这些更改保存到数据库, SaveChanges()则不应禁用更改跟踪。

方法

名称 说明
AcceptAllChanges()

接受对上下文中实体所做的所有更改。 假定跟踪的实体表示数据库的当前状态。 通常, SaveChanges() 在成功将更改保存到数据库后调用此方法。

CascadeChanges()

从所需的父/主体实体中切断子/依赖实体时,强制立即删除子实体/从属实体,或者删除所需的父/主体实体。 请参阅 DeleteBehavior。

Clear()

停止跟踪所有当前跟踪的实体。

DetectChanges()

扫描跟踪的实体实例以检测对实例数据所做的任何更改。 DetectChanges() 通常在需要 up-to日期信息时(在返回更改跟踪信息之前和返回更改跟踪信息之前 SaveChanges() 和返回时)由上下文自动调用。 如果禁用 AutoDetectChangesEnabled了此方法,通常只需调用此方法。

Entries()

返回上下文所跟踪的每个实体的一个 EntityEntry 。 这些条目提供对每个实体的更改跟踪信息和操作的访问权限。

Entries<TEntity>()

获取上下文所跟踪的给定类型的所有实体的一个 EntityEntry 。 这些条目提供对每个实体的更改跟踪信息和操作的访问权限。

GetEntriesForState(Boolean, Boolean, Boolean, Boolean)

获取由具有给定状态的上下文跟踪的每个实体的一个 EntityEntry 。 这些条目提供对每个实体的更改跟踪信息和操作的访问权限。

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

获取由具有给定状态的上下文跟踪的给定类型的每个实体的一个 EntityEntry<TEntity> 实体。 这些条目提供对每个实体的更改跟踪信息和操作的访问权限。

HasChanges()

检查是否正在跟踪任何新的、已删除或更改的实体,以便如果或SaveChangesAsync(CancellationToken)调用这些更改,则会将这些更改发送到数据库SaveChanges()。

TrackGraph(Object, Action<EntityEntryGraphNode>)

开始跟踪实体和可通过遍历其导航属性访问的任何实体。 遍历是递归的,因此也会扫描任何发现的实体的导航属性。 为每个已发现的实体调用指定 callback 项,并且必须设置 State 应在其中跟踪每个实体。 如果未设置状态,则实体将保持未跟踪状态。

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

首先通过遍历实体的导航属性来跟踪实体和可访问的任何实体。 遍历是递归的,因此也会扫描任何发现的实体的导航属性。 为每个已发现的实体调用指定 callback 项,并且必须设置 State 应在其中跟踪每个实体。 如果未设置状态,则实体将保持未跟踪状态。

此方法旨在用于使用上下文的一个实例检索实体的断开连接方案中,然后使用上下文的不同实例保存更改。 例如,一个 Web 服务,其中一个服务调用从数据库检索实体,另一个服务调用将保留对实体所做的任何更改。 每个服务调用使用在调用完成后释放的上下文的新实例。

通常,每当遇到已跟踪实体或到达不应跟踪的实体时,图形的遍历都应停止。 对于此典型行为,请使用 TrackGraph(Object, Action<EntityEntryGraphNode>) 重载。 另一方面,此重载允许回调决定遍历何时结束,但 onus 位于调用方上,以确保遍历不会进入无限循环。

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

开始跟踪实体和可通过遍历其导航属性访问的任何实体。 遍历是递归的,因此也会扫描任何发现的实体的导航属性。 为每个已发现的实体调用指定 callback 项,并且必须设置 State 应在其中跟踪每个实体。 如果未设置状态,则实体将保持未跟踪状态。

事件

名称 说明
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

当实体即将被上下文跟踪时触发的事件,要么是因为它是从跟踪查询返回的,要么是因为它正在附加到上下文或添加到上下文中。

显式接口实现

名称 说明
IInfrastructure<IStateManager>.Instance
已过时.

获取用于存储有关跟踪实体的信息的内部状态管理器。

此属性适用于扩展方法。 它不应用于应用程序代码。

IResettableService.ResetState()

重置服务,以便可以从池使用它。

IResettableService.ResetStateAsync(CancellationToken)

提供对上下文所跟踪的实体实例的更改跟踪信息和操作的访问权限。 此类的实例通常是从中 ChangeTracker 获取的,它不设计为直接在应用程序代码中构造。

扩展方法

名称 说明
GetInfrastructure<T>(IInfrastructure<T>)

从正在使用的隐藏 IInfrastructure<T>属性中获取值。

此方法通常由数据库提供程序(和其他扩展)使用。 它通常不用于应用程序代码。

ToDebugString(ChangeTracker, ChangeTrackerDebugStringOptions, Int32)

创建给定元数据的可读表示形式。

警告:不要依赖于返回的字符串的格式。 它仅用于调试,可以在版本之间任意更改。

适用于