Maison >développement back-end >C++ >Comment gérer plusieurs clés étrangères à partir du même tableau dans le code Framework Entity Framework en premier?
Le code du framework physique est préféré: gérer plusieurs clés extérieures du même tableau
Dans le code du cadre physique, vous pouvez d'abord rencontrer une relation qui doit être établie entre deux entités. Ceci est particulièrement difficile pour les débutants.
En considérant un modèle impliquant des équipes et des matchs, chacun ayant une équipe à domicile et une équipe invitée. Cependant, essayer d'utiliser des clés externes traditionnelles pour créer ce modèle peut entraîner des erreurs de référence du cycle.
Comprendre le problème
Comme le montre le fragment de code d'origine, lorsque la clé extérieure est définie dans l'entité de match, vous créez en fait une paire de multi-relations pour les attributs HomeTeam et GuestTeam entre le match et l'équipe. Cependant, ce paramètre entraînera une référence circulaire, car l'équipe fait également référence à la correspondance via la clé externe. Ce cycle viole les contraintes de la base de données.
Solution: utilisez des attributs de navigation définis et API Fluent ModelbuilderAfin de résoudre ce problème, vous pouvez utiliser un modèle amélioré qui utilise une collection d'attributs de navigation et utilise l'API ModelBuilder Fluent avec le cadre physique. Ceci est un exemple:
Dans la classe d'équipe, définissez deux attributs de navigation de collecte distincts:
Dans la classe de match, supprimez l'attribut ForeignKey:
Dans la classe DBContext, réécrivez la méthode OnModelCreating et utilisez la relation de configuration de l'API Cluent:
<code>public virtual ICollection<Match> HomeMatches { get; set; } public virtual ICollection<Match> AwayMatches { get; set; }</code>
Dans ce modèle mis à jour, l'entité Match a deux attributs de clés externes, mais il n'y a pas d'attribut de navigation. Au lieu de cela, l'attribut de navigation est défini sur l'entité de l'équipe et permet à la traversée de l'équipe de correspondre. Le processus de création de modèle utilise l'API Cluent pour spécifier explicitement la relation pour empêcher la référence de circulation. De plus, l'attribut WillCascAdEonDelete est défini sur False pour empêcher la suppression des classes, qui n'est pas recommandée dans cette scène.
<code>public int HomeTeamId { get; set; } public int GuestTeamId { get; set; }</code>En suivant cette méthode, vous pouvez créer avec succès un modèle avec plusieurs liaisons externes pointées vers la même table dans le code du framework physique.
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!