Entity Framework

0

Takie pytanie. Mam dwie klasy, A i B. Owe klasy są reprezentowane przez tabele w bazie danych. Klasa B posiada w sobie obiekt typu A, więc w bazie powstaje kolumna z kluczem obcym do tabeli A.

No i teraz, przyjmijmy że wykonuję sobie takie dwa zapytania w Linq, w których chcemy pobrać obiekt typu A posiadając jego ID.

a) _context.A.Single(x=> x.Id == ID)
b) _context.B.Single(x=>x.A.Id == ID)

Na pierwszy rzut oka, otrzymane obiekty są identyczne. Jednak istotnie różnią się kiedy chcemy ich dalej używać, przykładowo przypisując je do encji innych tabel. Użycie obiektu z b) powoduje że w tabeli A powstają kolejne duble obiektu A, z wygenerowanym nowym ID.

Byłbym wdzięczny za kilka słów wyjaśnienia. Z góry dziękuje.

0

No bo w przypadku a) wyciągasz encję typu A, której ID równa się przekazanemu, a w przypadku b) wyciągasz encję typu B, do której przypisana została encja A, której ID równa się przekazanemu.

Jesteś pewien, że się nie pomyliłeś? Bo jest późno, więc mogę się mylić, a już mi się nie chce odpalać kompa.

To z resztą sugeruje sam fakt, że w pierwszym przypadku wyciągasz obiekt z kolekcji A, a w drugim z kolekcji obiektów B.

0

Nie do końca dobrze napisałem. Przypadek b) to _context.B.Single(x=>x.A.Id == ID).A

Czyli pobieram encje A przy użyciu tabeli B.
A w wersji a) pobieram encje A przy użyciu tabeli A.

I w obu przypadkach otrzymane encje są identyczne. Różnie się tylko później zachowują, jak opisałem wcześniej.

0

W normalnym EF tak się nie dzieje. W normalnej sytuacji nie ma z znaczenia jak wyciagniesz obiekt. Czy bezpośrednio z kolekcji kontekstu czy z innego obiektu. Jeśli tylko jest śledzony przez EF to nie powinien się zachowywać tak jak piszesz. Pokaż kod.

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