Comprendre la gestion des objets enfants d'EF
Entity Framework (EF) tente par défaut d'enregistrer les entités enfants avec l'entité principale lors d'une sauvegarde ou opération d’insertion. Cependant, dans certains scénarios, ce comportement peut provoquer des problèmes.
Description du problème
Lors de la sauvegarde d'une entité, EF tente de sauvegarder également ses entités enfants. Toutefois, dans certains cas, les entités enfants peuvent déjà exister ou ne sont pas destinées à être insérées. Ce comportement entraîne des problèmes d'intégrité et peut être contre-productif.
Raison de l'exclusion de la sauvegarde
Il existe plusieurs raisons pour lesquelles un développeur peut souhaiter exclure les objets enfants de la sauvegarde. opération. Par exemple, les objets enfants peuvent représenter des valeurs de recherche qui existent déjà dans la base de données, et l'insertion de doublons ne serait pas souhaitable.
Remplacement de clé étrangère : une solution complète
Pour empêcher EF de sauvegarder les objets enfants, la solution préférée consiste à utiliser les propriétés de clé étrangère. En spécifiant une clé étrangère pour la relation, EF comprend que l'entité enfant est identifiée par une colonne distincte, et non par l'objet lui-même.
Pendant l'opération de sauvegarde, définissez explicitement l'objet enfant sur null et attribuez la clé étrangère appropriée. valeur clé. Cette approche indique clairement à EF que l'objet enfant ne doit pas être modifié lors de la sauvegarde.
public School Insert(School newItem, int cityId) { if (cityId <= 0) { throw new Exception("City ID not provided"); } newItem.City = null; // Exclude child object from save newItem.City_Id = cityId; // Specify foreign key value using (var context = new DatabaseContext()) { context.Set<School>().Add(newItem); context.SaveChanges(); return newItem; } }
Avantages de l'approche par clé étrangère
L'approche par clé étrangère offre plusieurs avantages :
En adoptant l'approche de clé étrangère, les développeurs obtiennent un meilleur contrôle sur la gestion des objets enfants d'EF, ce qui leur permet d'effectuer les opérations de base de données souhaitées sans rencontrer de problèmes imprévus.
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!