czwartek, 20 grudnia 2012

EF Eager Loading - ładowanie danych na wielu poziomach

Domyślnie w EF włączone jest LazyLoading. Powoduje to iż właściwości nawigacji - kolekcje obiektów tabeli z którą tworzą relację - nie są ładowane dopóki ich nie potrzebujemy.
Przeciwieństwem jest EagerLoading - powoduje ono załadowanie obiektów zależnych od razu.

EagerLoading
W EF aby wywołać załadowanie kolekcji danych innej tabeli wystarczy w zapytaniu wywołać metodę Include:

Code:
            var s1 = dataContext.Customers.Include("SalesOrderHeaders");
            var s2 = dataContext.Customers.Include(c => c.SalesOrderHeaders);

Można skorzystać z wersji przyjmującej parametr jako string lub Lambda Expression.


Wielopoziomowy EagerLoading
Załadowana kolekcja obiektów przez metodę Include może zawierać obiekty które także mają właściwości będące kolekcjami obiektów z innych tabel. Aby załadować kilka poziomów zależności wystarczy kolejne połączenia wymieniać po kropce dla wersji string, bądź też zastosować instrukcję selekcji w przypadku wersji LambaExpression:

Code:
            var customers = dataContext.Customers.Include("SalesOrderHeaders.SalesOrderDetails");
            var customers2 = dataContext.Customers.Include(x => x.SalesOrderHeaders.Select(y => y.SalesOrderDetails));

Brak komentarzy:

Prześlij komentarz