2012-11-02 13 views
6

Ich versuche, eine Viele-zu-viele-Beziehung zwischen der gleichen Tabelle in SQL Server zu erstellen.Kaskade löschen auf Viele-zu-viele zwischen derselben Tabelle

Ich habe eine Tabelle Object mit Spalten ObjectId und Name.

Die Beziehung folgt diesen Regeln:

  • ein Kind viele Eltern
  • Eltern viele Kinder
  • ObjectA kann ein Kind von ObjectB und ObjectB kann ein Kind von ObjectA
  • haben haben kann
  • sondern ein Objekt kann kein direktes Kind von selbst

So erstelle ich eine zweite Tabelle sein ObjectRelation mit Spalten ParentId und ChildId und natürlich möchte ich diese Beziehungen durch Kaskade gelöscht werden.

Aber wenn ich dies in SQL Server versuchen, erhalte ich die Fehler

Einführung FOREIGN KEY-Einschränkung ‚FK_ObjectRelation_Object1‘ auf dem Tisch ‚tblADMembership‘ kann Zyklen oder mehrere Kaskadenwege verursachen. Geben Sie ON DELETE NO ACTION oder ON UPDATE NO ACTION an, oder ändern Sie andere FOREIGN KEY-Einschränkungen.

In SQL Server Compact bekomme ich

Die Referenzbeziehung in einer zyklischen Referenz führen wird, die nicht erlaubt ist.

Ich habe einige der Forschung getan, und ich verstehe, warum ich diese Fehler, aber ist es eine Möglichkeit, dies zu umgehen, die auch auf SQL Server Compact arbeiten (also keine Stored Procedures)? Oder gibt es eine bessere Möglichkeit, diese Beziehung zu modellieren?

Antwort

2

Ich stieß selbst auf ein ähnliches Problem .... Ich entfernte den Fremdschlüssel. Die zyklische Löschlogik wurde auf Code übertragen.

0

Ich hatte ein ähnliches Problem mit einem Treeview. Dies ist ein Code zu löschen, das war nützlich für mich: (ich die ID in den Wert Eigenschaft speichern, und ich bin ein Entitätsmodell framwork mit löschen) Vielleicht kann jemand helfen

private void removeRecursive(TreeNode parentToDelete) 
    { 
     foreach (TreeNode tn in parentToDelete.ChildNodes) 
      removeRecursive(tn); 

     long id = long.Parse(parentToDelete.Value); 
     Category deleteCat = context.Categories.Single(x => x.Id ==id); 
     context.Categories.DeleteObject(deleteCat); 
    } 

PD traurig über meine Englisch ist es schrecklich ...

Verwandte Themen