Question

Utilisation du code EF6 Première convention, je souhaite créer un modèle avec deux clés étrangères sur la même table.Par exemple, j'ai maintenant équipe Modèle:

public class Team
{
    public Guid Id { get; set; }
    public String Name { get; set; }

    public virtual ICollection<Match> Matches { get; set; }
}

et match modèle:

public class Match
{
    public Guid Id { get; set; }
    public Int32 TeamHomeScore { get; set; }
    public Int32 TeamAwayScore { get; set; }

    public Guid TeamHomeId { get; set; } // I want these properties to be foreign keys
    public Guid TeamAwayId { get; set; } //

    public virtual Team TeamHome { get; set; }
    public virtual Team TeamAway { get; set; }
}

Mais après le fonctionnement du projet, j'ai une exception suivante:

Présentation de la contrainte de clé étrangère 'fk_dbo.matches_dbo.teams_teamhomeid' On Table 'Matchs' peut provoquer des cycles ou plusieurs chemins de cascade.Spécifiez sur Supprimer aucune action ou sur la mise à jour Aucune action, ni modifier d'autres contraintes de clé étrangère. Ne pouvait pas créer de contrainte.

toute recommandation?

Était-ce utile?

La solution

SQL Server renvoie une erreur car elle ne peut pas gérer plusieurs chemins de cascade.Le chemin multiple est le match ayant beaucoup propriétés .

Définir la cascade sur Supprimer sur FALSE.

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Match>()
                    .HasRequired<Team>(i => i.TeamHome)
                    .WithMany(i => i.Matches)
                    .WillCascadeOnDelete(false);

        base.OnModelCreating(modelBuilder);
    }

Comme il n'y a pas de cascade supprimée, vous devez d'abord supprimer les matchs de l'équipe avant de supprimer l'équipe elle-même.

Autres conseils

Essayez ceci, si vous utilisez des migrations.Les migrations ne sont pas intelligentes chaque fois, vous devriez parfois interdreper le code.

public class Match
{
    public Guid Id { get; set; }
    public Int32 TeamHomeScore { get; set; }
    public Int32 TeamAwayScore { get; set; }

    public Guid TeamHomeId { get; set; } // I want these properties to be foreign keys
    public Guid TeamAwayId { get; set; } //

    [ForeginKey("TeamHomeId")]
    public virtual Team TeamHome { get; set; }
    [ForeginKey("TeamAwayId")]
    public virtual Team TeamAway { get; set; }
}

Et puis vous ajouterez ci-dessous à votre DataContex.cs

protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
modelBuilder.Entity<Match>()
               .HasRequired(a => a.TeamHome )
               .WithMany()
               .HasForeignKey(u => u.TeamHomeId);

modelBuilder.Entity<Match>()
               .HasRequired(a => a.TeamAway )
               .WithMany()
               .HasForeignKey(u => u.TeamAwayId);
}

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top