2012-11-02 15 views
6

Próbuję utworzyć relację wiele do wielu między tą samą tabelą w programie SQL Server.Usuwanie kaskadowe wielu-do-wielu między tymi samymi tabelami

Mam jedną tabelę Object z kolumnami ObjectId i Name.

Relacja spełnia następujące reguły:

  • dziecko może mieć wiele rodziców
  • rodzic może mieć wiele dzieci
  • ObjectA mogą być dzieckiem objectB i objectB mogą być dzieckiem ObjectA
  • ale obiekt nie może być bezpośrednim dzieckiem sama

Więc utworzyć drugą tabelę ObjectRelation z kolumnami ParentId i ChildId i oczywiście chcę, aby te relacje zostały usunięte kaskadowo.

Ale gdy próbuję to w SQL Server pojawia się błąd

wprowadzając klucz obcy ograniczeń „FK_ObjectRelation_Object1” na stole „tblADMembership” może powodować cykli lub wiele ścieżek kaskadowe. Określ ON DELETE NO ACTION lub ON UPDATE NO ACTION lub zmodyfikuj inne ograniczenia klucza OBCEGO.

W SQL Server Compact uzyskać

Relacja referential spowoduje cykliczne odsyłającego wynika, że ​​nie jest dozwolone.

Robiłem rozeznanie i rozumiem, dlaczego mam te błędy, ale czy istnieje sposób wokół to, że będzie również działać na SQL Server Compact (więc nie procedury przechowywane)? Czy istnieje lepszy sposób na modelowanie tej relacji?

Odpowiedz

2

Sam natknąłem się na podobny problem .... W efekcie usunąłem klucz obcy. Cykliczna logika usuwania została przekazana do kodu.

0

Miałem podobny problem z widokiem drzewa. Jest to kod, aby usunąć to było przydatne do mnie: (I zapisać identyfikator do wartości nieruchomości i używam modelu podmiot ram prac do usunięcia) Może komuś pomóc

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 przepraszam mój angielski jest okropny ...

Powiązane problemy