Je m'étais investi un jour pour trouver une solution sans succès. J'aime créer une relation simple de plusieurs à plusieurs.Plusieurs-à-plusieurs Relations avec 'code first' dans Entity Framework 5 (EF5 - version finale) avec VS2012
Pour que j'ai créé deux modèles:
Une classe du joueur où je vais avoir la propriété de navigation « Turnaments » pour voir ce qui a turnaments visiter un joueur.
public class Player
{
[Key]
public Int64 PlayerId { get; set; }
public string FirstName { get; set; }
[Required]
public string Surename { get; set; }
public virtual ICollection<Turnament> Turnaments { get; set; }
}
et une classe Turnament où j'aurai la propriété de navigation 'Players' pour voir quels joueurs font partie du turnament.
public class Turnament
{
[Key]
public int TurnamentId { get; set; }
[Required]
public string Name { get; set; }
public DateTime? StartDate { get; set; }
public DateTime? EndDate { get; set; }
public bool IsClosed { get; set; }
public virtual ICollection<Player> Players { get; set; }
}
Si démarrer le mirgation de la commande 'de base de données Upate-' (Automtic migratons = on) à la fenêtre 'Package Manager Console' de VS2012 - Je reçois l'exception suivante:
Présentation FOREIGN KEY La contrainte 'FK_dbo.PlayerTurnaments_dbo.Turnaments_Turnament_TurnamentId' sur la table 'PlayerTurnaments' peut provoquer des cycles ou plusieurs chemins en cascade. Spécifiez ON DELETE NO ACTION ou ON UPDATE NO ACTION ou modifiez d'autres contraintes FOREIGN KEY. Impossible de créer une contrainte. Voir les erreurs précédentes.
Aussi l'arrière-plan de cette exception je comprends.
Je vais donc atteindre à dire l'entité framwork que si je suis supprimer:
a) Un joueur EF ne doit pas pousser une suppression en cascade à l'Turnament associée
b) Un Turnament EF devrait Pousser une cascade supprimer au lecteur associé
avec cet arrière-plan les chemins de cycles ont disparu.
J'étais donc essayer de mettre en œuvre une « cascade de commutateurs supprimer off » via l'API couramment de l'entité Framwork:
public class DataContext : DbContext
{
public DbSet<Turnament> Turnaments { get; set; }
public DbSet<Player> Players { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//modelBuilder.Entity<Turnament>()
// .HasMany(b => b.Players)
// .WithMany(a => a.Turnaments)
// .Map(m => m.MapLeftKey("PlayerPid")
// .MapRightKey("TurnamentPid")
// .ToTable("TurnamentsJoinPlayers"));
//modelBuilder.Entity<Player>().HasRequired(t => t.Turnaments).
// WithMany().WillCascadeOnDelete(false);
//modelBuilder.Entity<Turnament>().HasRequired(t => t.Players).
// WithMany().WillCascadeOnDelete(false);
//modelBuilder.Entity<Player>().HasRequired(t => t.TurnamentsRelation).
// WithMany().HasForeignKey(p => p.PlayerId).WillCascadeOnDelete(false);
//modelBuilder.Entity<Player>().HasMany(p => p.TurnamentsRelation).
base.OnModelCreating(modelBuilder);
}
}
Mais comme vous le voyez everthing est parce que son remets ne vous aide pas.
thx pour toute l'aide compétente plus que seulement un code snippes que seules les fissures comprennent :) PS: Je suis sûr qu'il ya une solution pour EF5 (final) de ce genre d'un grand nombre à plusieurs relations
Quel a été le modèle comme avant la migration? –
Avez-vous seulement ces deux entités dans le modèle? Le message d'exception peut être trompeur. –
@GertArnold: Avant les propriétés de navigation 'Turnaments' et 'Players' n'existent pas. Ainsi, la migration initiale a créé la base de données avec les deux tables. –