考虑以下实体:
public class MyEntity1 {
public int ID {get; set;}
public int MyEntity2ID {get; set;}
public virtual MyEntity2 {get; set;}
}
public class MyEntity2{
public int ID {get; set;}
public virtual ICollection<MyEntity1> MyEntity1s{get; set;}
}
在控制器的MyEntity1
创建方法中,我就像这样
// Create POST
UnitOfWork.MyEntity1Repository.Insert(myEntity1); // It contains a value for MyEntity2ID already
UnitOfWork.Save();
// Also tried this but still doesn't work:
// myEntity1 = UnitOfWork.MyEntity1Repository.GetById(myEntity1.ID);
myEntity1.MyEntity2.SomeProperty; // MyEntity2 return nulls.
为什么会这样?懒惰加载只能在剃刀视图或其他东西上调用时才能工作?
答案 0 :(得分:1)
您误认为实体框架代理的POCO,它们不是一回事。 EF要求属性上的关键字virtual
允许延迟加载的事实应该为您提供EF如何进行延迟加载的线索。
尝试新的DbContext
获取MyEntity1
,然后.GetType()
查看ACTUAL类型。
所以...现在我们已经确定EF不使用你的MyEntity1
类,并创建了自己的类MyEntity1
,我们如何得到这个子类的“新”。答案是做DbContext.MyEntity1s.Create();
。
答案 1 :(得分:0)
尝试将MyEntity2.MyEntity1声明为虚拟,并确保您的表已定义了适当的fks。