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
Libérer: 2025-01-29 07:59:38
original
195 Les gens l'ont consulté

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:
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; }
}
Copier après la connexion

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
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; }
}
Copier après la connexion
, définissez simplement l'attribut de clé extérieure:

Match ForeignKey Enfin, dans la classe <类>, vous devez utiliser la relation de configuration

et
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; }
}
Copier après la connexion
:

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 de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal