• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

ASP.NET MVC - Usuwanie wierszy których parent Id nie istnieje

Mały hosting, OGROMNE możliwości
0 głosów
435 wizyt
pytanie zadane 2 marca 2020 w C# przez Moras Obywatel (1,620 p.)

Tworze drzewo katalogowe z ASP MVC. Tak wygląda mój model klasy:

    public class Node
    {
        public int Id { get; set; }
        public String Name { get; set; }
        
        public Node Parent { get; set; }
        public int? ParentId { get; set; }
    }

Stworzyłem sobie przycisk, po wciśnięciu którego usuwany jest zaznaczony katalog. Wszystko gra, ale problem pojawia się w momencie gdy katalog zawiera w sobie podkatalogi. Chciałbym by w takiej sytuacji usuwał się folder wraz z wszystkimi podkatalogami. Lecz gdy tak próbuję zrobić pojawia się wyjątek

SqlException: The DELETE statement conflicted with the SAME TABLE REFERENCE constraint "FK_dbo.Nodes_dbo.Nodes_Parent_Id". The conflict occurred in database "TreeDB", table "dbo.Nodes", column 'ParentId'.
The statement has been terminated.

Pewnie dzieję się tak dlatego, że po próbie usunięcia folderu w bazie danych zostają rekordy, których ParentId nie istnieje. Jak mogę rozwiązać ten problem?

Tutaj screen z przykładowych danych w bazie danych:

A tutaj akcja usuwania folderu

        [HttpPost]
        public HttpStatusCodeResult Delete(int id)
        {
            Node nodeInDb = _context.NodeEntities.Single(n => n.Id == id);
           
            _context.NodeEntities.Remove(nodeInDb);

            _context.SaveChanges();

            return new HttpStatusCodeResult(System.Net.HttpStatusCode.OK);
            
            
        }

 

1 odpowiedź

0 głosów
odpowiedź 2 marca 2020 przez tomek2323 Bywalec (2,050 p.)

Może masz w bazie zależność jeden do wielu folder podfoldery wtedy powinieneś najpierw usunąć podfoldery potem folder główny.

https://stackoverflow.com/questions/18122647/entity-framework-5-delete-one-to-many-relationship

komentarz 2 marca 2020 przez Moras Obywatel (1,620 p.)

Myślałem, że uda mi się jakoś kaskadowo to ustawić, ale za każdym razem błędy wyskakują. Stworzyłem więc tak jak napisałeś, że najpierw usuwanie podfolderów, a później folder główny.

private void Remove(Node node)
        {
           
            var listOfNodes = _context.NodeEntities.Where(a => a.ParentId == node.Id);
            if (listOfNodes != null)
                foreach (var node3 in listOfNodes)
                    Remove(node3);
            
            _context.NodeEntities.Remove(node);
        }

 

Podobne pytania

0 głosów
1 odpowiedź 656 wizyt
pytanie zadane 20 lutego 2018 w C# przez tomek2323 Bywalec (2,050 p.)
0 głosów
1 odpowiedź 2,026 wizyt
pytanie zadane 15 czerwca 2017 w C# przez Kriszu Nowicjusz (200 p.)
0 głosów
1 odpowiedź 597 wizyt
pytanie zadane 10 lutego 2018 w C# przez tomek2323 Bywalec (2,050 p.)

93,715 zapytań

142,629 odpowiedzi

323,261 komentarzy

63,258 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...