Maison >développement back-end >C++ >Comment gérer plusieurs clés étrangères à la même table dans le code Framework Entity Framework en premier?

Comment gérer plusieurs clés étrangères à la même table dans le code Framework Entity Framework en premier?

DDD
DDDoriginal
2025-01-29 07:55:09499parcourir

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

Code du cadre d'entité d'abord: Traitement de plusieurs clés externes dans le même tableau

Dans le noyau du cadre d'entité, il est essentiel de modéliser la relation inter-enthousiaste. Au fur et à mesure que vous rencontrez, la création d'un modèle avec plusieurs clés externes dans le même tableau peut provoquer des anomalies.

Dans votre exemple, vous définissez l'équipe et le match des entités pour capturer la relation entre l'équipe et le jeu. Cependant, votre méthode initiale déclenchera l'anomalie de référence du cycle.

Afin de résoudre ce problème, vous devez utiliser la configuration de l'API lisse de HasRequired () et Withmany () et de la méthode withmany (), ainsi que la méthode withmany () et la OnModelCreating (). Ceci est un modèle mis à jour:

dans ce modèle:
<code class="language-c#">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; }
}

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(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Match>()
                    .HasOne(m => m.HomeTeam)
                    .WithMany(t => t.HomeMatches)
                    .HasForeignKey(m => m.HomeTeamId)
                    .OnDelete(DeleteBehavior.Restrict); // or DeleteBehavior.NoAction

        modelBuilder.Entity<Match>()
                    .HasOne(m => m.GuestTeam)
                    .WithMany(t => t.AwayMatches)
                    .HasForeignKey(m => m.GuestTeamId)
                    .OnDelete(DeleteBehavior.Restrict); // or DeleteBehavior.NoAction
    }
}</code>

Les entités de l'équipe comprennent deux compétitions: les maison de maison et les acteurs.
  • Les entités de match ont HomeTeamid et GuestTeamid.
  • Dans onModelCreating (), nous utilisons l'API Cluent pour configurer la relation. Cela peut empêcher la référence de circulation.
  • Nous sommes explicitement définis
  • (ou
  • ) pour éviter les suppressions du couplet de niveau causée par l'auto-référence. OnDelete(DeleteBehavior.Restrict) DeleteBehavior.NoAction
  • Grâce à cette méthode, vous pouvez établir avec succès plusieurs clés externes à la même table dans le modèle EF Core. Notez que a été abandonné dans la nouvelle version EF Core, il est recommandé d'utiliser
ou

. WillCascadeOnDelete(false) empêchera les opérations de suppression, à moins que les enregistrements pertinents n'existent; Choisissez celui qui dépend de vos besoins spécifiques. OnDelete(DeleteBehavior.Restrict)

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