У меня есть следующие СущностиEntity Framework ленивая загрузка не работает в 1 .. * однонаправленная связь
public class A
{
public int AId {get; set;}
}
public class B
{
public int BId {get; set;}
public virtual A Child1 {get; set;}
public virtual A Child2 {get; set;}
}
со следующей конфигурацией
modelBuilder.Entity<B>()
.HasRequired(x => x.Child1)
.WithMany()
.Map(x => x.MapKey("Child1Id"))
modelBuilder.Entity<B>()
.HasRequired(x => x.Child2)
.WithMany()
.Map(x => x.MapKey("Child2Id"))
По какой-то причине Entity Framework не ленивым нагружают Child1 или Child2 при запросе объекта объекта B. Это
var b1 = context.Bs.FirstOrDefault();
Assert.IsNull(b.Child1) // true
Assert.IsNull(b.Child2) // true
но оно работает с, если я эксцессуально загружаю их.
var b2 = context.Bs.Include(x => x.Child1).Include(x => x.Child2).FirstOrDefault();
Assert.NotNull(b2.Child1) // true
Assert.NotNull(b2.Child2) // true
Кто-нибудь знает, почему свойства не становятся ленивыми?
EDIT
Кажется, что
context.Bs.FirstOrDefault()
возвращает сам объект, а не тип прокси. Это указывает на то, что свойство ProxyCreationEnabled является ложным, но я дважды проверил его и установил значение true.
EDIT 2
Ok, наконец, нашли проблему. Я установил конструктор Bs в private, что, конечно, не позволяет расширить объект с помощью прокси-класса. И, следовательно, свойства навигации, где установлено значение null.
Они были ленивы загружено ...... потому, что они не существуют (ленивая часть) –
Прочитайте эту прекрасную статью по [погрузочным сущностям из MSDN] (https://msdn.microsoft.com /en-gb/data/jj574232.aspx) –
Нет свойств, он работает, если я явно включаю их в запрос. – olif