Entités de suivi automatiqueSelf-tracking entities

Important

Nous ne recommandons plus d’utiliser le modèle des entités de suivi automatique.We no longer recommend using the self-tracking-entities template. Il reste disponible uniquement pour prendre en charge les applications existantes.It will only continue to be available to support existing applications. Si votre application doit utiliser des graphiques d’entités déconnectés, envisagez d’autres alternatives comme les Entités traçables, qui présentent une technologie similaire aux entités de suivi automatique, mais développée de manière plus active par la communauté, ou bien l’écriture de code personnalisé à l’aide des API de suivi de changements de bas niveau.If your application requires working with disconnected graphs of entities, consider other alternatives such as Trackable Entities, which is a technology similar to Self-Tracking-Entities that is more actively developed by the community, or writing custom code using the low-level change tracking APIs.

Dans une application Entity Framework, c’est un contexte qui est responsable du suivi des changements dans vos objets.In an Entity Framework-based application, a context is responsible for tracking changes in your objects. Vous utilisez la méthode SaveChanges pour conserver les changements dans la base de données.You then use the SaveChanges method to persist the changes to the database. Quand vous utilisez des applications multicouches, les objets d’entité sont généralement déconnectés du contexte et vous devez choisir à la fois comment suivre les changements et comment les signaler au contexte.When working with N-Tier applications, the entity objects are usually disconnected from the context and you must decide how to track changes and report those changes back to the context. Les entités de suivi automatique peuvent vous aider à suivre les changements dans n’importe quelle couche, puis de replacer ces changements dans un contexte pour les enregistrer.Self-Tracking Entities (STEs) can help you track changes in any tier and then replay these changes into a context to be saved.

Utilisez les entités de suivi automatique uniquement si le contexte n’est pas disponible sur la couche où ont lieu les changements du graphique d’objet.Use STEs only if the context is not available on a tier where the changes to the object graph are made. Si le contexte est disponible, il s’occupe de suivre les changements, vous n’avez donc pas besoin d’utiliser les entités de suivi automatique.If the context is available, there is no need to use STEs because the context will take care of tracking changes.

Cet élément de modèle génère deux fichiers .tt (modèle de texte) :This template item generates two .tt (text template) files:

  • Le fichier <nom du modèle>.tt génère les types d’entité et une classe d’assistance qui contient la logique de suivi des changements utilisée par les entités de suivi automatique et les méthodes d’extension qui permettent de définir l’état sur les entités de suivi automatique.The <model name>.tt file generates the entity types and a helper class that contains the change-tracking logic that is used by self-tracking entities and the extension methods that allow setting state on self-tracking entities.
  • Le fichier <nom du modèle>.Context.tt génère un contexte dérivé et une classe d’extension qui contient des méthodes ApplyChanges pour les classes ObjectContext et ObjectSet.The <model name>.Context.tt file generates a derived context and an extension class that contains ApplyChanges methods for the ObjectContext and ObjectSet classes. Ces méthodes examinent les informations de suivi des modifications contenues dans le graphique des entités de suivi automatique pour déduire l'ensemble des opérations à effectuer pour enregistrer les modifications dans la base de données.These methods examine the change-tracking information that is contained in the graph of self-tracking entities to infer the set of operations that must be performed to save the changes in the database.

Bien démarrerGet Started

Pour commencer, visitez la page Procédure pas à pas des entités de suivi automatique.To get started, visit the Self-Tracking Entities Walkthrough page.

Points fonctionnels à prendre en considération lors de l’utilisation d’entités de suivi automatiqueFunctional Considerations When Working with Self-Tracking Entities

Important

Nous ne recommandons plus d’utiliser le modèle des entités de suivi automatique.We no longer recommend using the self-tracking-entities template. Il reste disponible uniquement pour prendre en charge les applications existantes.It will only continue to be available to support existing applications. Si votre application doit utiliser des graphiques d’entités déconnectés, envisagez d’autres alternatives comme les Entités traçables, qui présentent une technologie similaire aux entités de suivi automatique, mais développée de manière plus active par la communauté, ou bien l’écriture de code personnalisé à l’aide des API de suivi de changements de bas niveau.If your application requires working with disconnected graphs of entities, consider other alternatives such as Trackable Entities, which is a technology similar to Self-Tracking-Entities that is more actively developed by the community, or writing custom code using the low-level change tracking APIs.

Tenez compte des éléments suivants lors de l'utilisation d'entités de suivi automatique :Consider the following when working with self-tracking entities:

  • Assurez-vous que votre projet client possède une référence à l'assembly contenant les types d'entités.Make sure that your client project has a reference to the assembly containing the entity types. Si vous ajoutez uniquement la référence de service au projet client, celui-ci utilisera les types de proxy WCF et non les types réels d'entité de suivi automatique.If you add only the service reference to the client project, the client project will use the WCF proxy types and not the actual self-tracking entity types. Cela signifie que vous n'aurez pas accès aux fonctionnalités de notification automatisée qui gèrent le suivi des entités sur client.This means that you will not get the automated notification features that manage the tracking of the entities on the client. Si vous ne souhaitez pas inclure les types d'entités, vous devrez définir manuellement les informations de suivi des modifications sur le client pour les modifications à renvoyer au service.If you intentionally do not want to include the entity types, you will have to manually set change-tracking information on the client for the changes to be sent back to the service.

  • Les appels aux opérations de service doivent être sans état et créer une nouvelle instance du contexte de l'objet.Calls to the service operation should be stateless and create a new instance of object context. Nous vous recommandons aussi de créer un contexte d’objet dans un bloc using.We also recommend that you create object context in a using block.

  • Quand vous envoyez le graphique modifié sur le client au service et que vous voulez continuer à utiliser le même graphique sur le client, vous devez effectuer une itération manuelle au sein du graphique et appeler la méthode AcceptChanges sur chaque objet pour réinitialiser le suivi des changements.When you send the graph that was modified on the client to the service and then intend to continue working with the same graph on the client, you have to manually iterate through the graph and call the AcceptChanges method on each object to reset the change tracker.

    Si des objets dans votre graphique contiennent des propriétés avec des valeurs générées par la base de données (par exemple, des valeurs d’identité ou de concurrence), l’Entity Framework remplace les valeurs de ces propriétés par les valeurs générées par la base de données après l’appel de la méthode SaveChanges.If objects in your graph contain properties with database-generated values (for example, identity or concurrency values), Entity Framework will replace values of these properties with the database-generated values after the SaveChanges method is called. Vous pouvez implémenter votre opération de service pour retourner des objets enregistrés ou une liste de valeurs de propriété générées pour les objets au client.You can implement your service operation to return saved objects or a list of generated property values for the objects back to the client. Le client devra ensuite remplacer les instances d'objet ou valeurs de propriété d'objet par les objets ou valeurs de propriété retournés à partir de l'opération de service.The client would then need to replace the object instances or object property values with the objects or property values returned from the service operation.

  • La fusion de graphiques à partir de plusieurs demandes de service peut introduire des objets avec des valeurs de clés dupliquées dans le graphique résultant.Merging graphs from multiple service requests may introduce objects with duplicate key values in the resulting graph. L’Entity Framework ne supprime pas les objets avec des clés en double quand vous appelez la méthode ApplyChanges, mais lève une exception.Entity Framework does not remove the objects with duplicate keys when you call the ApplyChanges method but instead throws an exception. Pour éviter les graphiques avec des valeurs de clé en double, suivez l’un des modèles décrits dans le blog suivant : Self-Tracking Entities: ApplyChanges and duplicate entities.To avoid having graphs with duplicate key values follow one of the patterns described in the following blog: Self-Tracking Entities: ApplyChanges and duplicate entities.

  • Lorsque vous modifiez la relation entre les objets en définissant la propriété de clé étrangère, la propriété de navigation de référence a la valeur Null et n'est pas synchronisée sur l'entité principale appropriée sur le client.When you change the relationship between objects by setting the foreign key property, the reference navigation property is set to null and not synchronized to the appropriate principal entity on the client. Dès que le graphique est attaché au contexte d’objet (par exemple, une fois que vous avez appelé la méthode ApplyChanges), les propriétés de clé étrangère et les propriétés de navigation sont synchronisées.After the graph is attached to the object context (for example, after you call the ApplyChanges method), the foreign key properties and navigation properties are synchronized.

    Le fait que la propriété de navigation de référence ne soit pas synchronisée avec l'objet principal approprié peut poser un problème si vous avez spécifié la suppression en cascade dans la relation de clé étrangère.Not having a reference navigation property synchronized with the appropriate principal object could be an issue if you have specified cascade delete on the foreign key relationship. Si vous supprimez l'objet principal, la suppression ne sera pas propagée aux objets dépendants.If you delete the principal, the delete will not be propagated to the dependent objects. Si vous avez spécifié des suppressions en cascade, utilisez les propriétés de navigation pour modifier les relations au lieu de définir la propriété de clé étrangère.If you have cascade deletes specified, use navigation properties to change relationships instead of setting the foreign key property.

  • Les entités de suivi automatique ne sont pas activées pour effectuer un chargement différé.Self-tracking entities are not enabled to perform lazy loading.

  • La sérialisation binaire et la sérialisation en objets de gestion d’état ASP.NET ne sont pas prises en charge par les entités de suivi automatique.Binary serialization and serialization to ASP.NET state management objects is not supported by self-tracking entities. Toutefois, vous pouvez personnaliser le modèle pour ajouter la prise en charge de la sérialisation binaire.However, you can customize the template to add the binary serialization support. Pour plus d’informations, consultez Utilisation de la sérialisation binaire et de ViewState avec les entités de suivi automatique.For more information, see Using Binary Serialization and ViewState with Self-Tracking Entities.

Considérations relatives à la sécuritéSecurity Considerations

Les considérations de sécurité suivantes doivent être prises en compte quand vous utilisez les entités de suivi automatique :The following security considerations should be taken into account when working with self-tracking entities:

  • Un service ne doit pas compter sur les requêtes pour récupérer ou mettre à jour les données d'un client non approuvé ou via un canal non approuvé.A service should not trust requests to retrieve or update data from a non-trusted client or through a non-trusted channel. Un client doit être authentifié : un canal sécurisé doit être utilisé ou bien une enveloppe de message.A client must be authenticated: a secure channel or message envelope should be used. Les requêtes de clients pour mettre à jour ou récupérer des données doivent être validées pour vérifier qu'elles sont conformes aux modifications attendues et légitimes pour le scénario donné.Clients' requests to update or retrieve data must be validated to ensure they conform to expected and legitimate changes for the given scenario.
  • Évitez d'utiliser des informations sensibles comme clés d'entité (par exemple, des numéros de sécurité sociale).Avoid using sensitive information as entity keys (for example, social security numbers). Cela limite l'éventualité de sérialiser par inadvertance des informations sensibles dans les graphiques d'entité de suivi automatique sur un client qui n'est pas d'un niveau de confiance suffisant.This mitigates the possibility of inadvertently serializing sensitive information in the self-tracking entity graphs to a client that is not fully trusted. Avec les associations indépendantes, la clé d'origine d'une entité associée à celle qui est sérialisée peut être également envoyée au client.With independent associations, the original key of an entity that is related to the one that is being serialized might be sent to the client as well.
  • Pour éviter la propagation de messages d’exception contenant des données sensibles vers la couche cliente, les appels à ApplyChanges et SaveChanges sur la couche serveur doivent être wrappés dans le code de gestion des exceptions.To avoid propagating exception messages that contain sensitive data to the client tier, calls to ApplyChanges and SaveChanges on the server tier should be wrapped in exception-handling code.