Eager Loading w Entity Framework

Eager loading w platformach ORM opisałem we wpisie Lazy loading i eager loading. W tym wpisie opiszę jak użyć eager loading w Entity Framework. Pokażę również jak użycie eager loading przekłada się na zapytania do bazy danych. W przykładach będę używał konfiguracji z bazą danych PostgreSQL, którą opisałem w tym wpisie.

W przykładach będziemy używać struktury bazy danych pokazanej na poniższym rysunku:

BookAuthorAssociation

Składa się ona z dwóch tabel Author i Book. Relacja między tymi tabelami to jeden do wielu, czyli jeden autor może być przypisany do wielu książek.

Konfiguracja Entity Framework

W przykładach użyjemy bazy danych PostgreSQL, dla innych baz danych konfigurację trzeba odpowiednio zmodyfikować.

Tworzymy bazę danych i aplikację konsolową, dodajemy biblioteki Npgsql i Entity Framework – szczegóły jak to zrobić są we wpisie: Entity Framework i PostgreSQL.

Tworzymy następujące klasy:

Do funkcji Main() w pliku Program.cs dodaj następujący kod:

Linia 1 wyłącza automatyczne generowanie i aktualizowanie schematu bazy danych – Npgsql nie wspiera tej funkcjonalności.

Pozostałe linie wypełniają nam tablice przykładowymi danymi i na zakończenie czyszczą bazę danych.

Przykłady należy wstawiać w miejsce komentarza ‘Examples here’

Możemy teraz przejść do przykładów.

Przykłady użycia eager loading w Entity Framework

Porównajmy jak zachowają się przykłady opisane we wpisie lazy loading w Entity Framework, gdy użyjemy eager loading. Dodaj następujący kod:

Zwróć uwagę na funkcję Include() w zaznaczonej linii – to jedyna różnica między użyciem domyślnego lazy loading a eager loading. Informuje ona Entity Framework, że naszym życzeniem jest pobranie danych potrzebnych do wypełnienia właściwości Author. W wyniku otrzymujemy dokładnie taką listę książek:

Zobaczmy jakie zapytania SQL zostały wykonane tym razem:

Zostało wykonane tylko jedno zapytanie do bazy danych, które pobrało dane z obu tabel naraz.

Zobaczmy teraz co się stanie w przypadku drugiego przykładu, dodaj następujący kod:

Również jedyną różnicą jest użycie funkcji Include(), tym razem z parametrem “Books”. W wyniku otrzymujemy:

W wyniku tego kodu zostało wykonane następujące zapytanie do bazy danych:

Jak widać Entity Framework wygenerował tylko jedno zapytanie SQL, ale za to naprawdę fikuśne. 🙂

Podsumowanie

Eager loading w Entity Framework używa się bardzo podobnie do lazy loading, jedyna różnica to wywołanie funkcji Include(), w której jako argument podajemy, która zależność ma zostać pobrana.

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


Comments are closed.