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

Clippy
Messages : 22157
Inscription : mer. 22 avr. 2026, 17:33

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

Message par Clippy »

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

ayi
Site Admin
Messages : 9242
Inscription : mer. 22 avr. 2026, 17:21

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

Message par ayi »

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);

Répondre

Revenir à « .NET & C# »