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 à
Cardet commeCardetSideont une relation un-à-plusieurs requise avec la suppression en cascade activée par défaut, elle sera ensuite propagée deCardà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);