Поделиться через


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)

Это внутренний API, который поддерживает инфраструктуру Entity Framework Core и не подчиняется тем же стандартам совместимости, что и общедоступные 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()

Проверяет, отслеживаются ли новые, удаленные или измененные сущности, чтобы эти изменения отправлялись в базу данных при 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 объект , в который должна отслеживаться каждая сущность. Если состояние не задано, сущность остается неотслеченной.

События

DetectedAllChanges

Событие, возникающее при обнаружении каких-либо изменений в графе сущностей, путем явного вызова DetectChanges()или автоматически, например при выполнении SaveChanges() или SaveChangesAsync(CancellationToken).

DetectedEntityChanges

Событие, возникающее при обнаружении каких-либо изменений в отдельной сущности, путем явного вызова DetectChanges() или DetectChanges()или автоматически, например при выполнении SaveChanges() или SaveChangesAsync(CancellationToken).

DetectingAllChanges

Событие, возникающее при обнаружении изменений в графе сущностей, которые должны произойти, либо через явный вызов DetectChanges(), либо автоматически, например при выполнении SaveChanges() или SaveChangesAsync(CancellationToken).

DetectingEntityChanges

Событие, возникающее при обнаружении изменений в одной сущности, должно произойти либо через явный вызов DetectChanges() или DetectChanges(), либо автоматически, например при выполнении SaveChanges() или SaveChangesAsync(CancellationToken).

StateChanged

Событие, возникающее при перемещении EntityState сущности, отслеживаемой связанным DbContext объектом.

StateChanging

Событие, возникающее при перемещении EntityState сущности, отслеживаемой связанным DbContext объектом.

Tracked

Событие, возникающее при отслеживании сущности контекстом, либо потому, что она была возвращена из запроса отслеживания, либо потому, что она была присоединена или добавлена в контекст.

Tracking

Событие, возникающее, когда сущность вот-вот будет отслеживаться контекстом, либо потому, что она возвращается из запроса отслеживания, либо потому, что она присоединяется или добавляется в контекст.

Явные реализации интерфейса

IInfrastructure<IStateManager>.Instance
Является устаревшей..

Возвращает внутренний диспетчер состояний, используемый для хранения сведений о отслеживаемых сущностях.

Это свойство предназначено для использования методами расширения. Он не предназначен для использования в коде приложения.

IResettableService.ResetState()

Сбрасывает службу, чтобы ее можно было использовать из пула.

IResettableService.ResetStateAsync(CancellationToken)

Предоставляет доступ к сведениям об отслеживании изменений и операциям для экземпляров сущностей, отслеживаемых контекстом. Экземпляры этого класса обычно получаются из ChangeTracker и не предназначены для непосредственного создания в коде приложения.

Методы расширения

ToDebugString(ChangeTracker, ChangeTrackerDebugStringOptions, Int32)

Создает удобочитаемое представление заданных метаданных.

Предупреждение. Не полагайтесь на формат возвращаемой строки. Он предназначен только для отладки и может изменяться произвольно между выпусками.

GetInfrastructure<T>(IInfrastructure<T>)

Получает значение из свойства, скрытого с помощью IInfrastructure<T>.

Этот метод обычно используется поставщиками баз данных (и другими расширениями). Обычно он не используется в коде приложения.

Применяется к