Création, ajout, modification et suppression d'objets (Entity Framework)
Les objets d'un contexte de l'objet sont des instances de types d'entités qui représentent des données de la source de données. Vous pouvez modifier, créer et supprimer des objets dans un contexte d'objet ; Entity Framework assure le suivi des modifications apportées à ces objets. Lorsque la méthode SaveChanges est appelée, Entity Framework génère et exécute des commandes qui exécutent les instructions de mise à jour, d'insertion ou de suppression équivalentes sur la source de données. Pour plus d'informations, consultez Enregistrement des modifications et gestion de l'accès concurrentiel (Entity Framework).
Mappage des fonctions d'insertion, de mise à jour et de suppression aux procédures stockées
Entity Framework vous permet de mapper des opérations d'insertion, de mise à jour et de suppression d'un type d'entité à des procédures stockées. Si vous projetez de mapper des procédures stockées à vos entités, il est recommandé de mapper les trois opérations à la fois. Si, par exemple, vous mappez un type d'entité aux procédures stockées d'insertion et de mise à jour, mais vous ne mappez pas à la procédure stockée de suppression, lorsque vous essayerez de supprimer un objet de ce type, l'opération de suppression échouera à l'exécution avec UpdateException. Pour plus d'informations, consultez How to: Map Modification Functions to Stored Procedures et Walkthrough: Mapping an Entity to Stored Procedures.
Création et ajout d'objets
Lorsque vous voulez insérer des données dans la source de données, vous devez créer une instance d'un type d'entité et ajouter l'objet à un contexte de l'objet. Avant de pouvoir enregistrer un nouvel objet à la source de données, vous devez au préalable définir toutes les propriétés qui ne prennent pas en charge les valeurs Null. Si vous utilisez des classes générées par Entity Framework , envisagez la méthode Create ObjectName statique du type d'entité pour créer une nouvelle instance d'un type d'entité. Les outils Entity Data Model incluent cette méthode dans chaque classe lorsqu'ils génèrent les types d'entités. Cette méthode Create permet de créer une instance d'un objet et de définir toutes les propriétés de la classe qui ne peuvent pas être Null. Elle inclut un paramètre pour chaque propriété dont l'attribut Nullable="false"
est appliqué dans le fichier CSDL. Pour plus d'informations, consultez Procédure : créer un objet à l'aide d'une méthode create statique (Entity Framework).
Si vous utilisez des entités POCO (objets CLR « classiques »), envisagez la méthode CreateObject pour créer un nouvel objet au lieu d'utiliser l'opérateur new. La méthode CreateObject encapsule la nouvelle instance POCO dans l'objet proxy approprié. Pour plus d'informations, consultez Utilisation d'entités POCO (Entity Framework).
Vous pouvez ajouter de nouveaux objets à un contexte d'objet à l'aide de l'une des méthodes suivantes :
Méthode AddObject sur ObjectContext.
Méthode Add sur EntityCollection. Pour les entités et les objets proxy générés par Entity Framework , les entités ajoutées sont jointes au contexte lorsque l'objet principal est joint. Les entités POCO sont jointes lorsque la méthode DetectChanges est appelée.
Vous devez tenir compte des points suivants lors de l'ajout de nouveaux objets :
Avant que SaveChanges soit appelé, Entity Framework génère une valeur de clé temporaire pour chaque nouvel objet. Après l'appel à la méthode SaveChanges, la valeur de clé est remplacée par la valeur d'identité attribuée par la source de données lorsqu'une nouvelle ligne est insérée.
Si la valeur de clé d'une entité n'est pas générée par la source de données, vous devez attribuer une valeur unique. Si deux objets ont la même valeur de clé spécifiée par l'utilisateur, un objet InvalidOperationException se produit lorsque la méthode SaveChanges est appelée. Dans ce cas, vous devez assigner des valeurs uniques et réessayer l'opération.
Suppression d'objets
Le fait d'appeler la méthode DeleteObject sur l"objet ObjectSet ou la méthode DeleteObject sur l'objet ObjectContext marque l'objet spécifié comme devant être supprimé. La ligne n'est supprimée de la source de données qu'une fois que la méthode SaveChanges a été appelée. Le comportement de suppression des objets diffère dans Entity Framework selon le type de relation auquel l'objet appartient.
Dans une relation d'identification, où une clé primaire de l'entité principale fait partie de la clé primaire de l'entité dépendante, la suppression d'un objet peut également supprimer des objets connexes. Les objets dépendants ne peuvent pas exister sans une relation définie à l'objet parent. La suppression de l'objet parent supprime également tous les objets enfants. Ce résultat équivaut à activer l'attribut <OnDelete Action="Cascade" />
sur l'association pour la relation.
Dans une relation autre qu'une relation d'identification représentée comme une association de clé étrangère, Entity Framework définit des propriétés de clé étrangère Nullable pour les objets dépendants sur Null lorsque l'objet principal est supprimé.
Pour plus d'informations, consultez Élément OnDelete (CSDL) et Définition et gestion des relations (Entity Framework).
Modification d'objets
Entity Framework suit les modifications apportées aux objets joints à un ObjectContext. Les outils Entity Data Model génèrent également une paire de méthodes partielles nommées OnPropertyChanging et OnPropertyChanged. Ces méthodes sont appelées dans l'accesseur Set de propriété. Étendez ces méthodes dans des classes partielles pour insérer une logique métier personnalisée pendant des modifications de propriété. Pour plus d'informations, consultez Procédure : exécuter la logique métier lors de la modification des propriétés scalaires (Entity Framework). Pour les procédures d'utilisation des entités POCO, consultez Suivi des modifications dans les entités POCO (Entity Framework).
Vous devez tenir compte des points suivants lors de la modification d'objets :
Lorsqu'une propriété scalaire ou complexe d'un objet complexe est modifiée, l'état de l'objet entité de niveau supérieur est changé en Modified. Dans les entités POCO qui ne satisfont pas les exigences pour la génération de proxy décrites dans Spécifications pour la création de proxys POCO (Entity Framework), l'état des propriétés modifiées sera modifié à Modified lorsque la méthode DetectChanges est appelée.
Les modifications ne sont pas suivies lorsque les objets sont dans un état Detached. Les objets sont dans cet état quand il est retourné par une requête qui utilise l'option de fusion NoTracking ou après qu'avoir été détaché d'un objet ObjectContext en appelant Detach.
Lorsque vous modifiez une association de clé étrangère, l'état de l'objet dépendant se transforme en Modified. Lorsque vous modifiez une association indépendante, l'état de l'objet dépendant ne change pas.
Pour plus d'informations sur le suivi de modifications dans les entités POCO, consultez Suivi des modifications dans les entités POCO (Entity Framework).
Ajout d'objets à un EntitySet spécifique
Il peut arriver qu'un type d'entité appartienne à plusieurs jeux d'entités. Par exemple, imaginons une situation dans laquelle une base de données possède deux tables avec des schémas identiques. Ce peut être le cas si vous souhaitez partitionner les données pour produire un processus de sauvegarde plus efficace. Par exemple, vous pouvez partitionner les données des clients entre les tables Customer et CustomerArchive. La table CustomerArchive a le même schéma que la table Customer mais elle est destinée aux clients qui n'ont pas passé de commandes depuis plus de six mois. Customer peut être sauvegardé chaque nuit, tandis que CustomerArchive est sauvegardé une fois par semaine. En ce qui concerne le mappage, Customer et CustomerArchive doivent appartenir à des jeux d'entités différents. Entity Framework prend en charge ce scénario en permettant à un type d'entité d'exister dans un ou plusieurs jeux d'entités. Pour plus d'informations, consultez Élément EntitySet (CSDL).
Lorsqu'un type d'entité existe dans plusieurs jeux d'entités, Entity Framework vous permet d'ajouter de nouvelles instances du type à un jeu d'entités spécifique. Dans la version 4 du .NET Framework, une classe ObjectContext générée pour un modèle spécifique a les propriétés du type ObjectSet qui représentent les jeux d'entités du modèle. Utilisez la méthode AddObject pour ajouter de nouveaux objets au contexte de l'objet. Pour plus d'informations, consultez Utilisation d'ObjectSet (Entity Framework). Dans .NET Framework version 3.5 SP1, vous devez spécifier la valeur de entitySetName lorsque vous appelez la méthode AddObjectpour ajouter l'objet au contexte de l'objet.
Dans cette section
Procédure : ajouter, modifier et supprimer des objets (Entity Framework)
Procédure : créer un objet à l'aide d'une méthode create statique (Entity Framework)
Voir aussi
Tâches
Procédure : définir un modèle avec jeux d'entités multiples par type (Entity Framework)
Procédure : ajouter, modifier et supprimer des objets (Entity Framework)
Concepts
Définition et gestion des relations (Entity Framework)
Utilisation d'entités POCO (Entity Framework)
Utilisation d'ObjectSet (Entity Framework)
Utilisation d'ObjectSet (Entity Framework)
Élément OnDelete (CSDL)