L'introduction de la contrainte de CLÉ ÉTRANGÈRE peut causer des cycles ou en cascade de plusieurs chemins. Spécifier on delete no action

De l'utilisateur, des Employeurs, des Candidats et de l'Emploi, un employeur peut créer plusieurs emplois et chaque tâche peut avoir qu'un seul employeur, un candidat peut s'appliquer à de nombreux emplois et de chaque tâche peut avoir plusieurs appliquée membres.

Ainsi, la relation est comme ceci:

L'introduction de la contrainte de CLÉ ÉTRANGÈRE peut causer des cycles ou en cascade de plusieurs chemins. Spécifier on delete no action

Je suis en utilisant entity framework code first approche, à l'heure actuelle si je supprime un employeur, il va supprimer toutes les tâches connexes et l'utilisateur de la base de données, et si je supprime candidat, il va supprimer l'utilisateur:

modelBuilder.Entity<Employer>()
     .HasRequired(e => e.User)
    .WithOptional(e => e.Employer).WillCascadeOnDelete();

//member is candidate
modelBuilder.Entity<Member>()
    .HasRequired(e => e.User)
    .WithOptional(e => e.Member).WillCascadeOnDelete();

modelBuilder.Entity<Employer>()
    .HasMany(a => a.Jobs)
    .WithRequired(b => b.Employer)
    .WillCascadeOnDelete();

Tout fonctionne bien sauf quand je préciser de nombreux de nombreux la relation entre les candidats et de l'emploi et de la mise à jour de la base de données à l'aide de "mise à jour de la base de données", il me donne cette erreur:

L'introduction de la contrainte de CLÉ ÉTRANGÈRE 'FK_dbo.MemberJobMap_dbo.Jobs_JobId' sur la table 'MemberJobMap" 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.

Voici comment j'ai précisé que de nombreux de nombreux de la relation:

modelBuilder.Entity<Member>()
   .HasMany(m => m.Jobs)
   .WithMany(j => j.Members)
   .Map(c =>
   {
      c.MapLeftKey("Id");
      c.MapRightKey("JobId");
      c.ToTable("MemberJobMap");
   });

et quand j'ajoute de la migration:

CreateTable(
   "dbo.MemberJobMap",
   c => new
   {
      Id = c.String(nullable: false, maxLength: 128),
      JobId = c.Int(nullable: false),
   })
   .PrimaryKey(t => new { t.Id, t.JobId })
   .ForeignKey("dbo.Members", t => t.Id, cascadeDelete: true)
   .ForeignKey("dbo.Jobs", t => t.JobId, cascadeDelete: true)
   .Index(t => t.Id)
   .Index(t => t.JobId);   

J'ai essayé de changer cascadeDelete de faux, mais qui me donne l'erreur quand je supprime un candidat qui ont appliqué des emplois ou quand j'essaie de supprimer une tâche à laquelle sont appliqués les candidats.

Comment corriger cette erreur? De sorte que:

  1. Lorsqu'un poste est supprimé, c'est d'aller retirer associés
    candidatejobmap lignes de la table sans toucher n'importe quelle autre table
  2. Lorsqu'un candidat est éliminé, il va supprimer associés
    candidatejobmap lignes de la table et de la table user en ligne sans opérer de
    autre table
  3. Tout en gardant toutes les autres effacer en cascade d'action
    la même

OriginalL'auteur Mindless | 2014-12-23