Betrachten Person
und Address
Klassen definiert alsWarum funktioniert in Entity Framework das Laden von Lazy nicht für eine Eins-zu-Null-Navigationseigenschaft?
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; }
}
wo nur einige Personen eine Adresse haben, aber alle Adressen haben eine Person. Dies ist ein one-to-zero-or-one relationship, so dass ich so konfiguriere, dass als
modelBuilder.Entity<Address>()
.HasKey(a => a.PersonId)
.HasRequired(a => a.Person)
.WithOptional(a => a.Address);
nun in meinem Code die folgende Vorgehensweise (eager loading) arbeitet völlig in Ordnung.
var person = context.Person
.Include(a => a.Address)
.Single(a => a.PersonId == 123);
var address = person.Address; // address != null (correct)
Der folgende Ansatz (Lazy Loading) nicht jedoch.
var person = context.Person
.Single(a => a.PersonId == 123);
var address = person.Address; // address == null (incorrect)
Außerdem hakte ich SQL Profiler, und ich kann sehen, dass EF nicht einmal die Adresse im zweiten Fall zu faul Last versucht - es gibt nur null.
Ich konnte keine Dokumentation finden, die besagt, dass EF keine Eins-zu-Null-Navigationseigenschaften lädt. Ist das Absicht, ist es ein Fehler, oder mache ich etwas falsch?
Ich testete dies sowohl mit Entity Framework 5 und Entity Framework 6 Alpha 3 und erzielte die gleichen Ergebnisse.
Funktioniert für mich. Sind Sie sicher, dass "ProxyCreationEnabled" und "LazyLoadingEnabled" für den Kontext wahr sind? –