我哪里错了?我收到NullReferenceExeption
了Navigation属性Events
。它被标记为virtual
,LazyLoadingEnabled
并被明确允许。
程序代码:
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; }
}
您的模型类需要是公共的才能延迟加载。更改为class Person
and class Event
be public class Person
etc,然后您的测试程序将开始工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句