Explicit loading w Entity Framework

Explicit loading w Entity Framework daje możliwość ręcznego kontrolowania interakcji z bazą danych. Dzięki temu właściwie w każdym momencie możemy zażądać załadowania danych a Entity Framework to wykona. Mechanizm ten może być używany razem z lazy i eager loading opisanymi tutaj albo je w ogóle zastąpić.

Konfiguracja

Projekt powinien być przygotowany tak jak ten opisany we wpisie Lazy loading w Entity Framework. Zamiast przykładów użycia lazy loading dodajemy przykłady explicit loading opisane poniżej.

Explicit loading w Entity Framework

Zobaczmy dwa przykłady. W pierwszym wymusimy załadowanie wszystkich elementów danego typu z bazy danych:

Linia 3 – wyłączamy lazy loading.
Linia 4 – wczytujemy listę książek (ponieważ lazy loading jest wyłączone, a nie użyliśmy eager loding, to wartości właściwości Author dla obiektów klasy Book nie zostały pobrane).
Linia 5 – informujemy Entity Framework, że chcemy żeby pobrał wszystkie wartości i stworzył wszystkie możliwe obiekty klasy Author
Linia 8 – odwołuje się do book.Author.Name, gdybyśmy w linii 5 nie wczytali wartości dla wszystkich elementów Author, to odwołanie do tego elementu spowodowałoby rzucenie wyjątku NullPointerException.

W drugim przykładzie będziemy pobierać wartość elementu Author dla każdej instancji klasy Book osobno:

Linia 7 ładuje do kontekstu wartość elementu Author dla konkretnego obiektu klasy Book (gdybyśmy zakomentowali tę linię, to w linii 8 rzucony zostałby wyjątek, że book.Author jest równe null).

Podsumowanie

Explicit Loading w Entity Framework używamy korzystając z funkcji Load() tak, jak to pokazałem w przykładach powyżej. Ciekawą kwestią jest – kiedy może się to przydać? Wtedy kiedy z jakiegoś powodu nie możemy skorzystać z lazy albo eager loading. Wtedy kiedy dodatkowe dane mają być pobrane tylko w jakimś szczególnym przypadku.

Kod przykładów explicit loading w Entity Framework można pobrać tutaj. Znajdują się tam również przykłady użycia lazy i eager loading.


Comments are closed.