L'introduction d'une contrainte FOREIGN KEY peut provoquer des cycles ou des chemins de cascade multiples - pourquoi ?

L’introduction d’une contrainte FOREIGN KEY peut provoquer des cycles ou des chemins de cascade multiples - pourquoi ?

Parce que Stage est requis, toutes les relations un-à-plusieurs où Stage est impliqué auront la suppression en cascade activée par défaut. Cela signifie que si vous supprimez une entité Stage

  • la suppression sera propagée directement à Side

  • la suppression sera propagée directement à Card et comme Card et Side ont une relation un-à-plusieurs requise avec la suppression en cascade activée par défaut, elle sera ensuite propagée de Card à Side

Vous avez donc deux chemins de suppression en cascade de Stage vers Side - ce qui provoque l’exception.

Vous devez soit rendre Stage optionnel dans au moins l’une des entités (c’est-à-dire supprimer l’attribut [Required] des propriétés Stage), soit désactiver la suppression en cascade avec l’API Fluent (impossible avec les annotations de données) :

modelBuilder.Entity<Card>()
    .HasRequired(c => c.Stage)
    .WithMany()
    .WillCascadeOnDelete(false);

modelBuilder.Entity<Side>()
    .HasRequired(s => s.Stage)
    .WithMany()
    .WillCascadeOnDelete(false);