Partager via


Suivi des modifications dans les entités POCO (Entity Framework)

Il existe deux façons de suivre les modifications dans les entités POCO (objets CLR « classiques ») : par le biais d'un objet proxy de suivi des modifications ou via un instantané.

Suivi des modifications avec des proxys

Lorsque la création d'objets proxy de suivi des modifications est activée pour les entités POCO, les modifications apportées au graphique d'objet sont suivies automatiquement par Entity Framework à mesure qu'elles se produisent. Pour plus d'informations, consultez Spécifications pour la création de proxys POCO (Entity Framework) et Résolution d'identité, gestion des états et suivi des modifications (Entity Framework). Si vous ne pouvez pas satisfaire aux spécifications supplémentaires de vos classes POCO ou si vous ne souhaitez pas que ces objets proxy soient matérialisés, vous pouvez désactiver la génération de classe proxy. Pour plus d'informations, consultez Utilisation d'entités POCO (Entity Framework).

Suivi des modifications à l'aide d'un instantané

Lorsque la création d'objets proxy est désactivée, les modifications apportées au graphique d'objet ne sont pas suivies automatiquement par Entity Framework à mesure qu'elles se produisent. Vous devez à la place utiliser la méthode DetectChanges pour signaler les modifications.

Lorsqu'un objet est attaché au contexte, un instantané de ses valeurs de propriété est créé. Lorsque la méthode DetectChanges est appelée, le graphique d'objet attaché est synchronisé avec l'objet ObjectStateManager. Pour plus d'informations sur l'attachement d'objets, consultez Attachement et détachement d'objets (Entity Framework). La méthode DetectChanges synchronise le graphique d'objet avec le gestionnaire d'état en effectuant les actions suivantes :

  1. Attachement des nouveaux objets du graphique au contexte de l'objet. Cela peut se produire si vous lancez une requête pour un objet principal et que vous créez une association avec un nouvel objet dépendant.

  2. Mise à jour de l'état des objets basée sur la comparaison entre les valeurs de propriété actuelles et l'instantané des valeurs d'origine (si l'instantané a déjà été créé).

Pour plus d'informations, consultez Procédure : détecter les modifications dans les entités POCO.

Dd456848.note(fr-fr,VS.100).gifRemarque :
Si une entité POCO contient une propriété de type complexe, les modifications apportées aux membres de l'instance du type complexe sont détectées via la méthode d'instantané même si l'entité dispose d'un proxy de suivi des modifications.Toutefois, si une nouvelle instance du type complexe est affectée à une propriété, la modification de la propriété est suivie de la même manière que les autres propriétés.

Lorsque les objets et ObjectStateManager ne sont pas synchronisés, les autres opérations qui utilisent l'objet ObjectStateManager, tel que l'ajout, l'attachement ou la suppression d'objets ; l'appel de la méthode Refresh ; ou même l'exécution de requêtes avec MergeOption ayant pour valeur PreserveChanges, peuvent avoir des résultats imprévisibles.

Du fait de l'importance de maintenir ObjectStateManager synchronisé avec les modifications apportées aux valeurs des entités POCO attachées, par défaut, la méthode SaveChanges appelle d'abord la méthode DetectChanges. Si vous avez apporté des modifications au graphique et que vous prévoyez d'utiliser l'une des méthodes suivantes, avant d'appeler SaveChanges, il est recommandé d'appeler DetectChanges :

Voir aussi

Concepts

Utilisation d'entités POCO (Entity Framework)