Entity Framework - przeszukiwanie

0

Mam dwa modele:

class User {
[Key]
string Id;
... inne pola ...
}

class Code {
virtual User Owner;
... inne pola ...
}

Entity Framework mapuje klucz obcy User na string (User_Id). Załóżmy że mam w bazie kilkadziesiąt tysięcy Code. Chcę znaleźć Code, którego klucz obcy wskazuje na konkretnego User. Szukam to w następujący sposób: db.Codes.SingleOrDefault(c => c. Owner.Id == userId). Co się dzieje w takim przypadku? Czy za każdym razem podczas przeszukiwania tabeli Codes wczytywany jest pełen obiekt User z bazy danych w celu porównania jego Id z userId? Czy może porównywana jest wartość string (User_Id) z userId bez wczytywania obektu typu User? Czy lepiej będzie zamienić model Code na następującą postać

class Code {
string OwnerId;
... inne pola ...
}

2

Nie. Domyślnie EF wykorzystuje lazy loading, czyli innymi słowy wczytywane są tylko te niezbędne dane. Zresztą jeżeli korzystasz z MSSQL możesz odpalić sobie Profiler'a i zobaczyć jaki kod generuje EF.

0
Uczynny Polityk napisał(a):

Czy za każdym razem podczas przeszukiwania tabeli Codes wczytywany jest pełen obiekt User z bazy danych w celu porównania jego Id z userId? Czy może porównywana jest wartość string (User_Id) z userId bez wczytywania obektu typu User?

To drugie. O dziwo nawet EF nie jest taki głupi, żeby pobrać w takim przypadku cały obiekt.

mariano901229 napisał(a):

Nie. Domyślnie EF wykorzystuje lazy loading, czyli innymi słowy wczytywane są tylko te niezbędne dane.

No właśnie, lazy loading dotyczy wczytywania danych na żądanie podczas nawigowania po właściwościach typów modeli, a nie sprawdzania ich we where.

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