Rozważmy Person
i Address
klasy zdefiniowane jakoW Entity Framework, dlaczego nie jest leniwe ładowanie działające dla właściwości nawigacyjnej jeden do zera lub jeden?
class Person
{
public int PersonId { get; set; }
public virtual Address Address { get; set; }
}
class Address
{
public int PersonId { get; set; }
public virtual Person Person { get; set; }
}
gdzie tylko niektóre osoby mają adresu, ale wszystkie adresy mają osobę. Jest to one-to-zero-or-one relationship, więc skonfigurować go jako
modelBuilder.Entity<Address>()
.HasKey(a => a.PersonId)
.HasRequired(a => a.Person)
.WithOptional(a => a.Address);
Teraz w moim kodu następujące podejście (chętni loading) działa perfekcyjnie.
var person = context.Person
.Include(a => a.Address)
.Single(a => a.PersonId == 123);
var address = person.Address; // address != null (correct)
Jednak następujące podejście (leniwe ładowanie) nie powoduje.
var person = context.Person
.Single(a => a.PersonId == 123);
var address = person.Address; // address == null (incorrect)
Ponadto ja podłączyć SQL Profiler i widzę, że nie jest nawet EF próby leniwy obciążenia adres w drugim przypadku - po prostu zwraca null.
Nie udało mi się zlokalizować żadnej dokumentacji, która mówi, że EF nie leniwie ładuje właściwości nawigacji od jednego do zera lub jednego. Czy jest to zgodne z projektem, czy jest to błąd, czy też robię coś nie tak?
Przetestowałem to zarówno z Entity Framework 5, jak i Entity Framework 6 Alpha 3 i otrzymałem te same wyniki.
Działa u mnie. Czy jesteś pewien, że 'ProxyCreationEnabled' i' LazyLoadingEnabled' są prawdziwe dla kontekstu? –