EF Core - problem z aktualizacją obiektu w bazie

0

Siema, może przybliże koncept - MVC, prosta gra typu gladiatus i idzie wszystko elegancko ale skrypt, który działał, nagle nawala. Abo mi się zdaję, że działał.
Mianowicie, to tak jakby zamiana 2 wartości - ale tylko jedna (zawsze "slotDesired") przeżywa. Druga zmienna a dokładniej rekord z bazy danych się rozpływa (UniqueItem).

Najdziwniejsze jest to (dla mnie), że stawiając breakpointy, nawet w Update wszystkie wartości pokazuje prawidłowo, dopiero po SaveChanges() w przeglądarce znika jeden przedmiot a w bazie danych przedmiot zaginął. Niestety, nie potrafie zgooglować tego problemu, zaznaczając fakt, że to działało. I w sumie chyba dalej działa, bo wartości wszystko gra i trąbi, ale tak po SaveChanges - krótko mówiąc - dupa - w bazie danych stała się sztuczka. Różne warianty próbowałem. Zawsze to samo, niby jest ok w skrypcie ale jednak coś nie tak, bo nie działa tak jak działać pokazuje sam debugger :)

screenshot-20210521190002.png

1

Nie jestem pewien, ale podejrzewam, że w tym przypadku robiona jest kaskadowa aktualizacja. Usuwasz Item z pierwszej encji zamieniając go na inny, wywołujesz Update na tej encji -> EF Core widzi, że usunąłeś powiązanie z poprzednim Itemem, więc aktualizuje encję i usuwa item, do którego połączenie zostało usunięte. To, że potem obiekt tego Itemu jest użyty w kodzie linijkę niżej może już nie mieć znaczenia.

Być może się mylę i to coś innego i inny trop ktoś znajdzie, ale mimo wszystko zostawię jeszcze link w tym temacie:
https://www.learnentityframeworkcore.com/relationships/referential-constraint-action-options

0

Faktycznie, być może o to chodzi. Nie znalazłem innego rozwiązania póki co.
Pół dnia kminie o co biega a teraz nawet jak wiem to za bardzo nie kumam, czy w fluent API się bawić czy gdzie.

Generalnie wielkie dzięki :)

0

Skąd się biorą: slotDesired i backpackSlot?

w przeglądarce znika jeden przedmiot

Jak one trafiają do przeglądarki?

a w bazie danych przedmiot zaginął

Czy korzystasz z .AsNoTracking() przy wyciąganiu z bazy?

bo wartości wszystko gra i trąbi

^^ ciekaw jestem co miałeś na myśli?

0

Jest tu tak magiczna logika,
że nie bede przedstawiał ale wygląda to tak mniej więcej tak:

var backpackSlot = _db.Slots.Where([..] FirstOrDefault
var slotDesired = _db.Slots.Where([..] FirstOrDefault

jak nie zwraca null to idzie dalej i przechodzi do tego co dawałem na screenie.
np. tak próbuje i wszystko się zgadza, wartości są zamienione ale w bazie danych jeden przedmiot znika.
screenshot-20210521212705.png

Jestem noobem i na dziś się poddaje, nie ogarniam niestety tematu.

0

Znika z bazy

W sensie po Update jest usunięty z bazy? Czemu nie pokażesz całej klasy? Czemu wrzucasz screeny a nie kod?

Jestem noobem i na dziś się poddaje, nie ogarniam niestety tematu.

Spora część sukcesu to umieć zdiagnozować nazwać problem.

0

Nie pokaże, bo boje się hejterów.
Nie no żartuje (w sumie to nie), Obeszłem to, niestety pewnie drogą obciążającą baze danych, mianowicie: po prostu tworzy zupełnie nowe Unique Itemy i mapuje je z tych wartości. screenshot-20210522073340.pngscreenshot-20210522073348.png
I w ten sposób działa, choć nie wiem czy nie za wielkim kosztem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1