Maison >développement back-end >C++ >Comment modéliser une relation de partenariat avec deux clés étrangères de la même table dans le code Framework Entity Framework en premier?

Comment modéliser une relation de partenariat avec deux clés étrangères de la même table dans le code Framework Entity Framework en premier?

Barbara Streisand
Barbara Streisandoriginal
2025-01-29 08:04:09779parcourir

How to Model a Team-Match Relationship with Two Foreign Keys from the Same Table in Entity Framework Code First?

Utilisation du code de framework physique Préféré: Créez deux clés externes à partir de la même table pour indiquer la relation de correspondance de l'équipe

Question:

Lorsqu'un débutant étudie la complexité du code du cadre physique, il a demandé des conseils pour définir un modèle efficace pour refléter la relation entre l'équipe et le jeu. Les exigences spécifiques sont que chaque jeu implique deux entités d'équipe différentes, qui sont spécifiées en équipes à domicile et en équipes invitées, et conservent les résultats du jeu.

Réponse:

Vous pouvez utiliser les méthodes suivantes pour construire le modèle requis:

Rebvention des attributs de classe d'équipe:

Supprimez la propriété ICOllection des matchs existants de la classe d'équipe.

Introduire deux nouvelles propriétés d'icollection: les articles de fonds et les acteurs.
  1. Modifiez le modèle comme suit:
  2. Relation de la clé extérieure personnalisée:
<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>

Modifiez la classe Match pour contenir les attributs de clé nécessaires et supprimez l'attribut des propriétés hometeam et invités.

Utilisez une API courante dans DBContex pour définir la relation de clé externe:
  1. [ForeignKey]
  2. Remarque:
<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; }
}

public class Context : DbContext
{
    // ...

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Match>()
                    .HasRequired(m => m.HomeTeam)
                    .WithMany(t => t.HomeMatches)
                    .HasForeignKey(m => m.HomeTeamId)
                    .WillCascadeOnDelete(false);

        modelBuilder.Entity<Match>()
                    .HasRequired(m => m.GuestTeam)
                    .WithMany(t => t.AwayMatches)
                    .HasForeignKey(m => m.GuestTeamId)
                    .WillCascadeOnDelete(false);
    }
}</code>
Chaque entité de l'équipe doit avoir deux matchs, des manifestations de maison et des actions.

Utilisez une API CLUENT pour définir la relation de clé externe, car dans cette scène, la valeur par défaut convenue par la clé principale de mappage est insuffisante.

Désactivez la suppression de la classe pour empêcher l'accident de supprimer les équipes référencées par plusieurs matchs.
  • Cette réponse révisée maintient l'image d'origine et uses plus concise et plus claire tout en conservant les informations de base.

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