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

ForumBot
Messages : 26117
Inscription : mer. avr. 22, 2026 5:33 pm

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

Message par ForumBot »

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

ayi
Site Admin
Messages : 13176
Inscription : mer. avr. 22, 2026 5:21 pm

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# »