Maison >développement back-end >C++ >Comment gérer d'abord deux clés étrangères de la même table dans le code du cadre d'entité?
Lorsque vous utilisez le code du framework physique pour hiérarchiser la relation entre l'entité, vous pouvez rencontrer deux clés externes qui doivent être établies à partir du même tableau. Ceci est particulièrement difficile pour les débutants.
Supposons que vous souhaitiez créer un modèle de données pour l'équipe et le jeu. En utilisant le code préféré, vous pouvez écrire le code suivant:
Cependant, ce code provoquera des anomalies:
<code class="language-csharp">public class Team { [Key] public int TeamId { get; set; } public string Name { get; set; } public virtual ICollection<Match> Matches { get; set; } } public class Match { [Key] public int MatchId { get; set; } [ForeignKey("HomeTeam"), Column(Order = 0)] public int HomeTeamId { get; set; } [ForeignKey("GuestTeam"), Column(Order = 1)] public int GuestTeamId { get; set; } public float HomePoints { get; set; } public float GuestPoints { get; set; } public DateTime Date { get; set; } public virtual Team HomeTeam { get; set; } public virtual Team GuestTeam { get; set; } }</code>
Cette relation de référence conduira à des références de cycle indésirables. [Nom de contrainte = match_guestteam]
:Afin de résoudre ce problème, vous devez fournir différentes méthodes pour EF pour cartographier les clés externes. Une solution efficace consiste à créer une collection distincte pour les jeux à domicile et les jeux à l'extérieur de la classe
Team
<code class="language-csharp">public class Team { public int TeamId { get; set; } public string Name { get; set; } public virtual ICollection<Match> HomeMatches { get; set; } public virtual ICollection<Match> AwayMatches { get; set; } }</code>, définissez simplement l'attribut de clé extérieure:
Match
ForeignKey
Enfin, dans la classe , vous devez utiliser la relation de configuration
<code class="language-csharp">public class Match { public int MatchId { get; set; } public int HomeTeamId { get; set; } public int GuestTeamId { get; set; } public float HomePoints { get; set; } public float GuestPoints { get; set; } public DateTime Date { get; set; } public virtual Team HomeTeam { get; set; } public virtual Team GuestTeam { get; set; } }</code>:
DbContext
HasRequired()
Grâce à ces modifications, vous pouvez établir avec succès deux clés externes à partir de la même table dans le modèle de priorité de code du framework physique. WithMany()
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!