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

APS.NET MCV usuwanie rekorów z bazy danych

Object Storage Arubacloud
0 głosów
645 wizyt
pytanie zadane 5 maja 2017 w C# przez Rout Bywalec (2,350 p.)
edycja 6 maja 2017 przez Rout

Z bazy danych chcę usunąć kilka rekordów naraz. W zmiennej przedmiot jest lista tego co ma być usunięte z bazy. W foreach item po itemie wywołuje Remove, jak foreach się skończy to save bazy lecz wywala taki błąd próbowałem już chyba wszystkiego i nic :(

 

 

kod:

 public ActionResult UsunStudenta(int id)
        {
            int idPrzedmiot = Convert.ToInt16(TempData["Przedmiott"]);
            
           
            var przedmiot = (db.Oceny_Przedmiot
            .Where(x => x.SI_ID == id && x.PT_ID == idPrzedmiot)).ToList();



            foreach (var row in przedmiot)
            {
                db.Oceny_Przedmiot.Remove(row);
            }
            db.SaveChanges();

            

            return RedirectToAction("Index");
        }

 

Tak prezentuje się tabela:

 

Lista przedmiotów do usunięcia:

 

Oraz w którym miejscu wyskakuje error:

 

Dzięki za wszelkie uwagi/pomoc !

 

5 odpowiedzi

+1 głos
odpowiedź 24 czerwca 2017 przez pulson666 Stary wyjadacz (12,560 p.)
Myślę, że problem polega na tym, że tych danych teoretycznie jeszcze nie masz i chcesz robić zmiany na czymś czego nie ma. myślę że powinieneś użyć Eager Loading by wszystko śmigało jak należy. (to że je widzisz to nie do końca tak jest :p et zapewne sobie je ładuję wtedy gdy je potrzebujesz) Oczywiście mogę się mylić lecz to chyba dobra droga by się dowiedzieć co jeset nie tak
komentarz 24 czerwca 2017 przez pulson666 Stary wyjadacz (12,560 p.)
@rout I w et domyślnie jest lazy loading ;) czyli leniwe. więc chyba dobra droga :p
0 głosów
odpowiedź 5 maja 2017 przez Leszek Szymański Gaduła (3,180 p.)
Spróbuj tak:

 foreach (var row in przedmiot)

           {

               db.Oceny_Przedmiot.Attach(row);

               db.Oceny_Przedmiot.Remove(row);

           }

           db.SaveChanges();
komentarz 5 maja 2017 przez Rout Bywalec (2,350 p.)
Nie pomogło to samo co wcześniej :(
0 głosów
odpowiedź 6 maja 2017 przez Rout Bywalec (2,350 p.)

Nie mam już do tego siły i rozwiązałem problem tak:
 

foreach (var item in przedmiot)
            {
                using (SqlConnection connection = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;Initial Catalog=C:\\JOBBOERSE\\DB.MDF;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"))
                using (SqlCommand command = new SqlCommand("", connection))
                {
                    command.CommandText = "delete from Oceny_Przedmiot where SI_ID=@Idsi and PT_ID=@idpt and PY_ID = @idpy";
                    command.Parameters.AddWithValue("@Idsi", item.SI_ID);
                    command.Parameters.AddWithValue("@Idpt", item.PT_ID);
                    command.Parameters.AddWithValue("@Idpy", item.PY_ID);
                    connection.Open();
                    command.ExecuteNonQuery();
                }
            }

Chciałbym to zrobić lepiej, ale żeby robota szła do przodu to narazie będzie tak :(

komentarz 7 maja 2017 przez Leszek Szymański Gaduła (3,180 p.)

A probowales tak?

db.xxx.RemoveRange();
db.SaveChanges();
komentarz 8 maja 2017 przez Rout Bywalec (2,350 p.)
Tak, efekt ten sam
0 głosów
odpowiedź 24 maja 2017 przez pulson666 Stary wyjadacz (12,560 p.)
Pytanie. Czy rekordy które usuwasz mają jakiś klucz obcy ? nie możesz usunąć rekordu z bazy jeżeli jest powiązany z innym rekordem
komentarz 24 czerwca 2017 przez Rout Bywalec (2,350 p.)
Klucze obce mogą być ponieważ jest zastosowane onCascade Delete czy jakoś tak :D. Także apka jest na to odporna
–1 głos
odpowiedź 5 maja 2017 przez Graatz Obywatel (1,480 p.)
Zobacz czy lista przedmiot jest poprawnie tworzona. Spróbuj sprawdzić jej zawartość przed usuwaniem z bazy. Upewnij się też, że przy wywoływaniu akcji podajesz id.
komentarz 6 maja 2017 przez Rout Bywalec (2,350 p.)
Lista jest tworzona poprawnie to co powinno w niej być jest przy wywołaniu akcji podaje id które potem używam do stworzenia listy.

Podobne pytania

0 głosów
1 odpowiedź 392 wizyt
pytanie zadane 16 września 2017 w C# przez Fawkes Nowicjusz (140 p.)
0 głosów
1 odpowiedź 424 wizyt
pytanie zadane 17 listopada 2021 w C# przez kuba412 Początkujący (310 p.)
0 głosów
1 odpowiedź 246 wizyt
pytanie zadane 2 marca 2020 w C# przez Moras Obywatel (1,620 p.)

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...