2016-07-13 11 views
2

Ich habe viele Tabellen in meiner SQL-Datenbank mit einer großen Anzahl von Fremdschlüsselbeziehungen, die cascade delete verwenden. Ich habe festgestellt, dass eine bestehende Beziehung Kaskadenlöschung erfordert. Der Versuch, damit diese die hilfreiche Nachricht gibt:Ermitteln der CASCADE DELETE-Pfade, die das Hinzufügen eines neuen kaskadierten Löschvorgangs verhindern

Unable to create relationship Introducing FOREIGN KEY constraint on table may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. Could not create constraint. See previous errors. 

Allerdings ist es nicht die anderen Pfade durch den Satz von Tabellen erwähnen, dass die Schaffung einer zyklischen Beziehung führen würde; es ausweicht einfach das Problem, indem er sagt:

modify other FOREIGN KEY constraints 

Ich möchte keine Änderungen in Entity Framework machen, wie wir modell ersten arbeiten.

Wie kann ich die relevanten konkurrierenden Fremdschlüsselbeziehungen sehen?

+0

Manuelles Implementieren der kaskadierenden Löschung in einem Lösch-Trigger könnte möglicherweise eine Problemumgehung sein. Weil, wen es interessiert, wenn es zyklisch ist, am Ende, es kann nicht mehr Daten löschen, als es in der Datenbank gibt. Es kann jedoch langsam sein, wenn es zu tief durchläuft. – AXMIM

+0

Ich muss nicht den Leistungseinbruch eines Triggers erleiden. Ich muss die Fremdschlüssel bestimmen, die zu der zyklischen Beziehung beitragen, so dass ich sie deterministisch anpassen kann, um das Problem zu vermeiden. –

Antwort

0

Es ist nichts auszuweichen. Man vermutet, dass Sie irgendwo etwas haben, das einem Entity-Relationship (ER) Diagramm ähnelt, wodurch der Neuankömmling die Fremdschlüsselbeziehungen SOFORT verstehen kann und warum sie so sind wie sie sind.

Wenn Sie "Modell zuerst" arbeiten, wie Sie sagen, würden Sie nicht finden, dass Sie "Pferde in Mid-Stream" wechseln müssen, nachdem Sie bereits (scheinbar) etwas gebaut haben. (Das ist, was CREATE TABLE zu mir sagt: Sie BUILT etwas.)

+0

Wir haben ein ER-Diagramm, obwohl es eine sehr kleine Teilmenge der DB-Tabellen ist. Schlägst du vor, dass das Hinzufügen der Navigationseigenschaft über die edmx-Datei mir sagen wird, welche Navigationseigenschaften und ihre Tabellen der Grund für die zyklische Beziehung sind? Das ist die Schlüsselinformation, auf die sich diese Frage bezieht. –