Где я ошибаюсь? Я получаю NullReferenceExeption
в навигационной собственности Events
. Он отмечен как virtual
и LazyLoadingEnabled
явно разрешен.EF: Загрузка связанных объектов Lazy way dont work
программный код:
using (var db = new Db())
{
var person = new Person();
person.Name = "bla bla";
db.Persons.Add(person);
person.Events = new List<Event>(1);
person.Events.Add(new Event() { Description = "ABC", At = DateTime.Now });
db.SaveChanges();
}
using (var db = new Db())
{
var person = db.Persons.First();
Console.WriteLine(person.Events == null); //Output: True
Console.WriteLine(person.Events.Count); //System.NullReferenceException
}
Явная погрузочные работы:
var person = db.Persons.First();
db.Entry(person).Collection(p => p.Events).Load();
Console.WriteLine(person.Events == null); //Output: False
Console.WriteLine(person.Events.Count); //1
Классы Структура:
class Db : DbContext
{
public Db()
{
Database.SetInitializer(new DropCreateDatabaseAlways<Db>());
Configuration.LazyLoadingEnabled = true;
}
public DbSet<Person> Persons { get; set; }
public DbSet<Event> Events { get; set; }
}
class Person
{
public int id { get; set; }
public string Name { get; set; }
public virtual List<Event> Events { get; set; }
}
class Event
{
public int id { get; set; }
public DateTime At { get; set; }
public string Description { get; set; }
public Person Person { get; set; }
public int PersonId { get; set; }
}
Я думаю, что ваше отношение внешних ключей неверно –
Возможно, это что-то связано с версией EF - вы обновили ее в последнее время? Не могли бы вы опубликовать версию, которую используете? – Default
@Default, когда я создаю объекты, я добавлю свойство для Person in Event, указав, что событие имеет отношения с Лицом, а также измените Список на Icollection –