Suppression de la persistance des objets enfants dans Entity Framework
Dans Entity Framework, il est généralement supposé que l'enregistrement d'une entité conservera automatiquement ses objets enfants en tant que Bien. Toutefois, dans certains scénarios, il peut être souhaitable d’empêcher ce comportement. Ceci est particulièrement utile lorsqu'il s'agit de données aplaties qui peuvent ne pas correspondre directement au schéma de la base de données.
Considérons un scénario hypothétique dans lequel une entité School contient une propriété City. Lors du remplissage de l'objet School à partir d'un fichier plat, la propriété City peut faire référence à des tables de recherche pour déterminer les emplacements géographiques. Cependant, étant donné que ces définitions de villes existent déjà dans la base de données, il n'est pas nécessaire qu'Entity Framework les réinsère lors de la sauvegarde de l'école.
Pour empêcher Entity Framework de conserver des objets enfants dans de telles situations, il existe deux approches. :
Approche 1 : Utilisation d'EntityState
Une approche consiste à définir manuellement l'EntityState de l'enfant s'oppose à Inchangé. Cela demande à Entity Framework d'ignorer l'objet enfant lors de l'opération de sauvegarde. Voici un exemple :
using (var context = new DatabaseContext()) { context.Set<School>().Add(newItem); // Set the City property to Unchanged context.Entry(newItem.City).State = EntityState.Unchanged; context.SaveChanges(); }
Approche 2 : Utilisation d'une clé étrangère
Une approche plus élégante et flexible consiste à utiliser la propriété Foreign Key dans la définition de votre entité. Définissez un attribut de clé étrangère sur la propriété enfant pour spécifier explicitement sa relation avec l'entité étrangère. Par exemple :
public class School { [ForeignKey("City_Id")] public City City { get; set; } [Required] public int City_Id { get; set; } }
Cette approche vous permet de spécifier explicitement la valeur de la clé étrangère lors de la création de l'objet, informant Entity Framework que l'objet enfant a déjà été conservé. La propriété City peut être omise du graphique de contexte en la définissant sur null lors de l'enregistrement :
newItem.City = null; context.Set<School>().Add(newItem); context.SaveChanges();
En employant l'une ou l'autre de ces approches, vous pouvez empêcher Entity Framework de tenter de sauvegarder les objets enfants, en garantissant que seul le les entités souhaitées sont conservées dans la base de données.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!