ChangeTracker Classe

Définition

Fournit l’accès aux informations de suivi des modifications et aux opérations pour les instances d’entité dont le contexte est le suivi. Les instances de cette classe sont généralement obtenues à partir de ChangeTracker et ne sont pas conçues pour être construites directement dans le code de votre application.

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
Héritage
ChangeTracker
Implémente
IInfrastructure<Microsoft.EntityFrameworkCore.ChangeTracking.Internal.IStateManager> IResettableService

Constructeurs

ChangeTracker(DbContext)

Cette API prend en charge l’infrastructure Entity Framework Core et n’est pas destinée à être utilisée directement à partir de votre code. Cette API pourra être changée ou supprimée dans les versions ultérieures.

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

Il s’agit d’une API interne qui prend en charge l’infrastructure Entity Framework Core et qui n’est pas soumise aux mêmes normes de compatibilité que les API publiques. Elle peut être modifiée ou supprimée sans préavis dans aucune version. Vous ne devez l’utiliser directement dans votre code qu’avec une extrême prudence et savoir que cela peut entraîner des échecs d’application lors de la mise à jour vers une nouvelle version de Entity Framework Core.

ChangeTracker(IStateManager, IChangeDetector, IEntityEntryGraphIterator, DbContext)

Cette API prend en charge l’infrastructure Entity Framework Core et n’est pas destinée à être utilisée directement à partir de votre code. Cette API pourra être changée ou supprimée dans les versions ultérieures.

Propriétés

AutoDetectChangesEnabled

Obtient ou définit une valeur indiquant si la DetectChanges() méthode est appelée automatiquement par les méthodes de DbContext et les classes associées.

La valeur par défaut est true. Cela garantit que le contexte est conscient des modifications apportées aux instances d’entité suivies avant d’effectuer des opérations telles que SaveChanges() ou de retourner des informations de suivi des modifications. Si vous désactivez détecter automatiquement les modifications, vous devez vous assurer que DetectChanges() est appelé lorsque des instances d’entité ont été modifiées. Si vous ne le faites pas, certaines modifications ne seront pas conservées pendant SaveChanges() ou les informations de suivi des modifications obsolètes seront retournées.

CascadeDeleteTiming

Obtient ou définit une valeur indiquant quand son état est défini sur une entité dépendante/enfant Deleted une fois que son entité parent/principal a été marquée comme Deleted . La valeur par défaut est Immediate .

Les entités dépendantes/enfants sont uniquement supprimées automatiquement lorsque la relation est configurée avec Cascade . Cette valeur est définie par défaut pour les relations requises.

Context

Obtient le contexte auquel ce suivi des modifications appartient.

DebugView

Développez cette propriété dans le débogueur pour obtenir une vue explicite des entités faisant l’objet d’un suivi.

AVERTISSEMENT : ne comptez pas sur le format des chaînes de débogage. Elles sont conçues pour le débogage uniquement et peuvent changer arbitrairement entre les versions.

DeleteOrphansTiming

Obtient ou définit une valeur qui indique quand une entité dépendante/enfant aura son état défini sur une Deleted seule fois supprimée d’une entité parent/principal via une propriété de navigation ou de clé étrangère ayant la valeur null. La valeur par défaut est Immediate.

Les entités dépendantes/enfants sont uniquement supprimées automatiquement lorsque la relation est configurée avec Cascade . Cette valeur est définie par défaut pour les relations requises.

LazyLoadingEnabled

Obtient ou définit une valeur indiquant si les propriétés de navigation des entités suivies sont chargées lors du premier accès.

La valeur par défaut est true. Toutefois, le chargement différé ne se produit que pour les propriétés de navigation des entités qui ont également été configurées dans le modèle pour le chargement différé.

QueryTrackingBehavior

Obtient ou définit le comportement de suivi pour les requêtes LINQ exécutées sur le contexte. La désactivation du suivi des modifications est utile pour les scénarios en lecture seule, car elle évite la surcharge liée à la configuration du suivi des modifications pour chaque instance d’entité. Vous ne devez pas désactiver le suivi des modifications si vous souhaitez manipuler des instances d’entité et conserver ces modifications dans la base de données à l’aide de SaveChanges() .

Cette méthode définit le comportement par défaut pour le contexte, mais vous pouvez remplacer ce comportement pour les requêtes individuelles à l’aide des AsNoTracking<TEntity>(IQueryable<TEntity>) AsTracking<TEntity>(IQueryable<TEntity>) méthodes et.

La valeur par défaut est TrackAll. Cela signifie que le dispositif de suivi des modifications effectuera le suivi des modifications pour toutes les entités retournées à partir d’une requête LINQ.

Méthodes

AcceptAllChanges()

Accepte toutes les modifications apportées aux entités dans le contexte. Il est supposé que les entités suivies représentent l’état actuel de la base de données. Cette méthode est généralement appelée par SaveChanges() après que les modifications ont été enregistrées avec succès dans la base de données.

CascadeChanges()

Force la suppression en cascade immédiate des entités enfants/dépendantes lorsqu’elles sont détruites d’une entité parent/principal obligatoire, ou lorsque l’entité parent/principal requise est elle-même supprimée. Consultez DeleteBehavior.

Cette méthode est généralement utilisée lorsque CascadeDeleteTiming et/ou DeleteOrphansTiming ont été définis sur Never pour forcer manuellement les suppressions à un moment contrôlé par l’application.

Si AutoDetectChangesEnabled est true alors, cette méthode appellera DetectChanges() .

Clear()

Arrête le suivi de toutes les entités actuellement suivies.

DbContext est conçu pour avoir une durée de vie réduite au niveau de laquelle une nouvelle instance est créée pour chaque unité de travail. De cette façon, toutes les entités suivies sont ignorées lorsque le contexte est supprimé à la fin de chaque unité de travail. Toutefois, l’effacement de toutes les entités suivies à l’aide de cette méthode peut être utile dans les situations où la création d’une instance de contexte n’est pas pratique.

Cette méthode doit toujours être préférée au détachement de chaque entité suivie. Le détachement d’entités est un processus lent qui peut avoir des effets secondaires. Cette méthode est bien plus efficace lors de l’effacement de toutes les entités suivies du contexte.

Notez que cette méthode ne génère pas d' StateChanged événements, car les entités ne sont pas détachées individuellement.

DetectChanges()

Analyse les instances d’entité suivies pour détecter toute modification apportée aux données de l’instance. DetectChanges() est généralement appelé automatiquement par le contexte lorsque des informations à jour sont requises (avant SaveChanges() et lors du retour des informations de suivi des modifications). En général, vous devez appeler cette méthode uniquement si vous avez désactivé AutoDetectChangesEnabled .

Entries()

Obtient un EntityEntry pour chaque entité faisant l’objet d’un suivi par le contexte. Les entrées fournissent l’accès aux informations et aux opérations de suivi des modifications pour chaque entité.

Entries<TEntity>()

Obtient un EntityEntry pour toutes les entités d’un type donné faisant l’objet d’un suivi par le contexte. Les entrées fournissent l’accès aux informations et aux opérations de suivi des modifications pour chaque entité.

HasChanges()

Vérifie si des entités nouvelles, supprimées ou modifiées font l’objet d’un suivi, de sorte que ces modifications sont envoyées à la base de données si SaveChanges() ou SaveChangesAsync(CancellationToken) est appelé.

Notez que cette méthode appelle DetectChanges() , sauf si AutoDetectChangesEnabled a la valeur false .

TrackGraph(Object, Action<EntityEntryGraphNode>)

Commence le suivi d’une entité et des entités accessibles en parcourant ses propriétés de navigation. Traversal est récursif afin que les propriétés de navigation des entités découvertes soient également analysées. Le spécifié callback est appelé pour chaque entité découverte et doit définir le pour le State suivi de chaque entité. Si aucun État n’est défini, l’entité reste non suivie.

Cette méthode est conçue pour être utilisée dans les scénarios déconnectés où les entités sont récupérées à l’aide d’une instance du contexte, puis les modifications sont enregistrées à l’aide d’une autre instance du contexte. Par exemple, un service Web où un appel de service récupère des entités de la base de données et un autre appel de service rend persistantes les modifications apportées aux entités. Chaque appel de service utilise une nouvelle instance du contexte qui est supprimée lorsque l’appel est terminé.

Si une entité qui est déjà suivie par le contexte est détectée, cette entité n’est pas traitée (et ses propriétés de navigation ne sont pas parcourues).

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

Commence le suivi d’une entité et des entités accessibles en parcourant ses propriétés de navigation. Traversal est récursif afin que les propriétés de navigation des entités découvertes soient également analysées. Le spécifié callback est appelé pour chaque entité découverte et doit définir le pour le State suivi de chaque entité. Si aucun État n’est défini, l’entité reste non suivie.

Cette méthode est conçue pour être utilisée dans les scénarios déconnectés où les entités sont récupérées à l’aide d’une instance du contexte, puis les modifications sont enregistrées à l’aide d’une autre instance du contexte. Par exemple, un service Web où un appel de service récupère des entités de la base de données et un autre appel de service rend persistantes les modifications apportées aux entités. Chaque appel de service utilise une nouvelle instance du contexte qui est supprimée lorsque l’appel est terminé.

En général, le parcours du graphique doit s’arrêter chaque fois qu’une entité déjà suivie est rencontrée ou lorsqu’une entité est atteinte et ne doit pas être suivie. Pour ce comportement classique, utilisez la TrackGraph(Object, Action<EntityEntryGraphNode>) surcharge. En revanche, cette surcharge permet au rappel de décider à quel moment le parcours s’arrête, mais le charge est ensuite sur l’appelant pour s’assurer que le parcours n’entrera pas dans une boucle infinie.

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

Commence le suivi d’une entité et des entités accessibles en parcourant ses propriétés de navigation. Traversal est récursif afin que les propriétés de navigation des entités découvertes soient également analysées. Le spécifié callback est appelé pour chaque entité découverte et doit définir le pour le State suivi de chaque entité. Si aucun État n’est défini, l’entité reste non suivie.

Cette méthode est conçue pour être utilisée dans les scénarios déconnectés où les entités sont récupérées à l’aide d’une instance du contexte, puis les modifications sont enregistrées à l’aide d’une autre instance du contexte. Par exemple, un service Web où un appel de service récupère des entités de la base de données et un autre appel de service rend persistantes les modifications apportées aux entités. Chaque appel de service utilise une nouvelle instance du contexte qui est supprimée lorsque l’appel est terminé.

En général, le parcours du graphique doit s’arrêter chaque fois qu’une entité déjà suivie est rencontrée ou lorsqu’une entité est atteinte et ne doit pas être suivie. Pour ce comportement classique, utilisez la TrackGraph(Object, Action<EntityEntryGraphNode>) surcharge. En revanche, cette surcharge permet au rappel de décider à quel moment le parcours s’arrête, mais le charge est ensuite sur l’appelant pour s’assurer que le parcours n’entrera pas dans une boucle infinie.

Événements

StateChanged

Événement déclenché lorsqu’une entité suivie par le associé DbContext a été déplacée de l’un EntityState à l’autre.

Notez que cet événement ne se déclenche pas pour les entités lorsqu’elles sont d’abord suivies par le contexte. Utilisez l' Tracked événement pour être notifié lorsque le contexte commence le suivi d’une entité.

Tracked

Événement déclenché lorsqu’une entité est suivie par le contexte, soit parce qu’elle a été retournée à partir d’une requête de suivi, soit parce qu’elle a été attachée ou ajoutée au contexte.

Implémentations d’interfaces explicites

IInfrastructure<IStateManager>.Instance
Obsolète.

Obtient le gestionnaire d’état interne utilisé pour stocker des informations sur les entités suivies.

Cette propriété est destinée à être utilisée par les méthodes d’extension. Elle n’est pas destinée à être utilisée dans le code de l’application.

IResettableService.ResetState()

Réinitialise le service afin qu’il puisse être utilisé à partir du pool.

IResettableService.ResetStateAsync(CancellationToken)

Méthodes d’extension

ToDebugString(ChangeTracker, ChangeTrackerDebugStringOptions, Int32)

Crée une représentation explicite des métadonnées données.

AVERTISSEMENT : ne comptez pas sur le format de la chaîne retournée. Il est conçu pour le débogage uniquement et peut changer arbitrairement entre les versions.

GetInfrastructure<T>(IInfrastructure<T>)

Obtient la valeur d’une propriété qui est masquée à l’aide de IInfrastructure<T> .

Cette méthode est généralement utilisée par les fournisseurs de base de données (et d’autres extensions). Il n’est généralement pas utilisé dans le code de l’application.

IInfrastructure<T> est utilisé pour masquer les propriétés qui ne sont pas destinées à être utilisées dans le code de l’application, mais qui peuvent être utilisées dans les méthodes d’extension écrites par les fournisseurs de base de données, etc.

S’applique à