ChangeTracker 类

定义

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

public class ChangeTracker : Microsoft.EntityFrameworkCore.Infrastructure.IInfrastructure<Microsoft.EntityFrameworkCore.ChangeTracking.Internal.IStateManager>
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>
type ChangeTracker = class
    interface IInfrastructure<IStateManager>
    interface IResettableService
type ChangeTracker = class
    interface IResettableService
Public Class ChangeTracker
Implements IInfrastructure(Of IStateManager)
Public Class ChangeTracker
Implements IInfrastructure(Of IStateManager), IResettableService
Public Class ChangeTracker
Implements IResettableService
继承
ChangeTracker
实现
IInfrastructure<Microsoft.EntityFrameworkCore.ChangeTracking.Internal.IStateManager> IResettableService

注解

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

构造函数

ChangeTracker(DbContext)

此 API 支持 Entity Framework Core 基础结构,不应直接从代码使用。 将来的版本中可能会更改或删除此 API。

ChangeTracker(DbContext, IStateManager, IChangeDetector, IModel, IEntityEntryGraphIterator)

这是一个支持 Entity Framework Core 基础结构的内部 API,不受与公共 API 相同的兼容性标准的约束。 可能会在任何版本中更改或删除它,恕不另行通知。 应仅在代码中直接使用它,并且非常谨慎,并且知道在更新到新的 Entity Framework Core 版本时,这样做可能会导致应用程序失败。

ChangeTracker(IStateManager, IChangeDetector, IEntityEntryGraphIterator, DbContext)

此 API 支持 Entity Framework Core 基础结构,不应直接从代码使用。 将来的版本中可能会更改或删除此 API。

属性

AutoDetectChangesEnabled

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

CascadeDeleteTiming

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

Context

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

DebugView

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

警告:不要依赖于调试字符串的格式。 它们仅用于调试,并且可能会在版本之间任意更改。

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

DeleteOrphansTiming

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

LazyLoadingEnabled

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

QueryTrackingBehavior

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

方法

AcceptAllChanges()

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

CascadeChanges()

强制立即级联删除子/依赖实体(从所需的父/主体实体中分离),或者删除所需的父/主体实体本身。 请参阅 DeleteBehavior

Clear()

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

DetectChanges()

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

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

Entries()

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

Entries<TEntity>()

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

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>) 重载。 另一方面,此重载允许回调决定遍历何时结束,但该重载随后位于调用方上,以确保遍历不会进入无限循环。

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 中获取的,它不设计为在应用程序代码中直接构造。

扩展方法

ToDebugString(ChangeTracker, ChangeTrackerDebugStringOptions, Int32)

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

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

GetInfrastructure<T>(IInfrastructure<T>)

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

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

适用于