Attachement d'objets (Entity Framework)

Lorsqu'une requête est exécutée dans un contexte d'objet d'Entity Framework, les objets retournés sont automatiquement attachés au contexte d'objet. Vous pouvez également attacher à un contexte d'objet des objets obtenus à partir d'une source autre qu'une requête. Vous pouvez attacher des objets qui ont été détachés, des objets qui ont été retournés par une requête NoTracking ou encore des objets qui ont été obtenus en dehors du contexte d'objet. Vous pouvez également attacher des objets qui ont été stockés dans l'état d'affichage d'une application ASP.NET ou qui ont été retournés à partir d'un appel de méthode distant ou d'un service Web.

Utilisez l'une des méthodes suivantes pour attacher l'objet à un contexte d'objet :

  • Appelez la méthode AddObject sur l'objet ObjectContext pour ajouter l'objet au contexte de l'objet. Procédez de cette manière lorsqu'il s'agit d'un nouvel objet qui n'existe pas encore dans la source de données.

  • Appelez la méthode Attach sur l'objet ObjectContext pour attacher l'objet au contexte de l'objet. Procédez de cette manière lorsque l'objet existe déjà dans la source de données, mais qu'il n'est pas encore attaché au contexte. Pour plus d'informations, voir Procédure : attacher des objets connexes (Entity Framework).

  • Appelez AttachTo sur ObjectContext pour attacher l'objet à un jeu d'entités spécifique dans le contexte de l'objet. Procédez aussi de cette manière si l'objet a une valeur EntityKeynull (Nothing en Visual Basic).

  • Appelez la méthode ApplyPropertyChanges sur l'objet ObjectContext. Procédez de cette manière lorsque l'objet existe déjà dans la source de données et que vous souhaitez conserver les mises à jour des propriétés de l'objet détaché. Si vous attachez simplement l'objet, les modifications des propriétés sont perdues. Pour plus d'informations, voir Procédure : appliquer des modifications apportées à un objet détaché (Entity Framework).

Vous devez tenir compte des points suivants lors de l'attachement d'objets au contexte de l'objet :

  • Si l'objet qui est attaché a des objets connexes, ces objets sont également attachés au contexte de l'objet.

  • Pour attacher un objet à l'aide de Attach, l'objet doit implémenter IEntityWithKey et disposer d'une clé valide.

  • Les objets sont attachés au contexte de l'objet dans un état Unchanged.

  • Si l'objet attaché n'existe pas dans la source de données, il n'est pas ajouté lors de l'appel à la méthode SaveChanges. Dans ce cas, lorsque des modifications sont apportées aux propriétés, une exception se produit sur le serveur lors de l'appel à la méthode SaveChanges. Pour ajouter un objet, utilisez la méthode AddObject à la place de la méthode Attach.

  • Si l'objet qui est attaché est lié à d'autres objets, vous devez définir explicitement les relations de l'une des manières suivantes :

    • Attachez les deux objets au contexte de l'objet, puis appelez Attach sur l'objet EntityCollection ou EntityReference pour définir la relation.

    • Si aucun des deux objets n'est attaché, appelez la méthode Add sur l'objet EntityCollection et spécifiez l'objet connexe ou affectez l'objet connexe comme valeur de la propriété Value de l'objet EntityReference. Attachez ensuite la racine du graphique de l'objet au contexte de l'objet. Vous pouvez utiliser cette méthode pour construire un graphique d'objet à partir d'objets détachés, puis attacher le graphique au contexte de l'objet.

    Ces méthodes sont utilisées lors de l'attachement d'objets connexes qui ont été sérialisés selon la méthode de sérialisation XML. Pour plus d'informations, voir Procédure : attacher des objets connexes (Entity Framework).

  • Si les propriétés de l'objet qui est attaché ont été mises à jour, utilisez la méthode ApplyPropertyChanges pour appliquer ces mises à jour à l'objet existant. Pour plus d'informations, voir Procédure : appliquer des modifications apportées à un objet détaché (Entity Framework).

  • L'objet transmis à la méthode Attach doit avoir une valeur EntityKey valide. Si l'objet n'a pas de valeur EntityKey valide, utilisez la méthode AttachTo pour indiquer le nom du jeu d'entités.

  • Un InvalidOperationException se produit lorsqu'un objet qui est attaché a le même EntityKey qu'un autre objet du contexte de l'objet. Cette erreur ne se produit pas lorsque l'instance du même objet se trouve déjà dans le contexte de l'objet. La méthode Attach peut être appelée plusieurs fois sur l'instance du même objet tant que ce dernier est à l'état Unchanged.

  • Utilisez la méthode AttachTo pour attacher des objets à un jeu d'entités spécifique. Pour plus d'informations, voir Ajout, modification et suppression d'objets (Entity Framework).

  • Lorsque l'objet qui est attaché à l'aide de la méthode AttachTo a déjà une clé d'entité définie, une exception InvalidOperationException se produit si la valeur du paramètre entitySetName ne correspond pas au nom de jeu d'entités figurant dans la clé existante.

Voir aussi

Concepts

Détachement d'objets (Entity Framework)
Services Web et Entity Data Model (scénarios d'application)

Autres ressources

Gestion du contexte de l'objet (Entity Framework)