EF6 le Premier Code peut causer des cycles ou plusieurs chemins cascade
Je suis en utilisant EF6 le Premier Code.
J'ai deux classes:
public class Player
{
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
[Key]
public int Id { get; set; }
[Required, MinLength(2, ErrorMessage = "Player name must be at least 2 characters length")]
public string Name { get; set; }
[Required]
public int TeamClubId { get; set; }
[Required]
public int TeamNationalId { get; set; }
[Required, ForeignKey("TeamClubId")]
public virtual Team Club { get; set; }
[Required, ForeignKey("TeamNationalId")]
public virtual Team National { get; set; }
}
Et:
public class Team
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required, MinLength(2, ErrorMessage = "Team name must be at least 2 characters length")]
public string Name { get; set; }
[Required]
public TeamType Type { get; set; }
public virtual ICollection<Player> Players { get; set; }
}
Ce sont mes deux classe avec leur relation.
Un joueur appartient à deux équipes de club et d'équipes nationales.
Une équipe peut être soit en club ou national, et possède une collection de joueur.
Dans mon fichier de contexte j'utilise:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Player>()
.HasRequired<Team>(p => p.National)
.WithMany(t => t.Players)
.WillCascadeOnDelete(false);
base.OnModelCreating(modelBuilder);
}
Lors de l'exécution de l'outil de migration pour mettre à jour la base de données, j'obtiens l'erreur suivante:
L'introduction de la contrainte de CLÉ ÉTRANGÈRE 'FK_dbo.Players_dbo.Teams_TeamNationalId "sur la table "Joueurs" peut provoquer de cycles ou en cascade de plusieurs chemins. Spécifier on DELETE NO ACTION ou de la mise À JOUR, AUCUNE ACTION, ou modifier d'autres contraintes de CLÉ ÉTRANGÈRE.
N'a pas pu créer de contrainte. Voir les erreurs précédentes.
Comment puis-je le résoudre?
Il n'est pas le même cas. J'ai deux Équipes dans la classe de Joueur.
L'échantillon est de travailler pour moi. Avez-vous d'autres classes dans votre modèle, qui peut provoquer les dépendances circulaires / cascade de plusieurs chemins? Qu'en est
TeamType
, est-elle une classe ou un enum?TeamType est un enum
OriginalL'auteur janiv | 2014-01-27
Vous devez vous connecter pour publier un commentaire.
L'aide d'API Fluent:
OriginalL'auteur janiv
Je pense que le fait que votre
Team
n'a qu'une seule propriété de navigation pour les deux clés étrangères vers celui-ci peut être un problème avec votre EF code. Il est probablement plus acceptable d'avoir deux propriétés de navigation sur votreTeam
- un pour chaque clé étrangère pointant vers elle.OriginalL'auteur Ryan