EF Code First延迟加载不起作用

时间:2015-03-06 00:48:41

标签: c# asp.net-mvc entity-framework

考虑以下实体:

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.

为什么会这样?懒惰加载只能在剃刀视图或其他东西上调用时才能工作?

2 个答案:

答案 0 :(得分:1)

您误认为实体框架代理的POCO,它们不是一回事。 EF要求属性上的关键字virtual允许延迟加载的事实应该为您提供EF如何进行延迟加载的线索。

尝试新的DbContext获取MyEntity1,然后.GetType()查看ACTUAL类型。

所以...现在我们已经确定EF不使用你的MyEntity1类,并创建了自己的类MyEntity1,我们如何得到这个子类的“新”。答案是做DbContext.MyEntity1s.Create();

答案 1 :(得分:0)

尝试将MyEntity2.MyEntity1声明为虚拟,并确保您的表已定义了适当的fks。