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é?

Comment gérer d'abord deux clés étrangères de la même table dans le code du cadre d'entité?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-29 07:59:38155parcourir

How to Handle Two Foreign Keys from the Same Table in Entity Framework Code First?

Le code du framework physique est préféré: gérez deux clés extérieures du même tableau

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

Dans la classe , vous pouvez supprimer l'attribut
<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

et
<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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn