为什么这个EF场景不会延迟加载子实体?

时间:2013-06-19 19:42:17

标签: entity-framework

我有一个简单的控制器方法(通过ajax),它将新实体插入到数据库中,然后在数据库中查询所有相同类型的记录,并返回这些记录的列表(json)。

我无法弄清楚当我插入第一条记录并查询我的记录列表时,任何子实体都不会延迟加载。但是,当我添加第二个或任意数量的后续记录时,我的列表包括按预期延迟加载的所有子实体。这是一些代码:

public class Person
{
  public int Id {get;set;}
  public string Name {get;set;}
  public int StateId {get;set;}
  public virtual State State {get;set;}
} 

public class PersonController : Controller
{
  public ActionResult CreatePerson(PersonModel model)
  {
    var person = model.ToPersonEntity();
    _personService.InsertPerson(person);

    var people = _personService.GetAllPeople();//on first person inserted this list does NOT have State loaded
    var personAddresssList = people.Select(x => x.ToPersonAddressFormat());

    return Json(personAddressList, JsonRequestBehavior.AllowGet);
   }
}

实际上没有任何相关的代码,因为这是一个非常简单的操作。我通过在我的linq查询中使用.Include(x => x.State)修复了问题,但只要我的属性标记为“虚拟”,我就不会这样做。

我唯一能想到的是EF仍然将我的原始人作为被跟踪的实体,并且当我拉出人员列表并且唯一的人是我刚刚插入的那个人时,它会使用缓存的实体还没有附加任何子属性。如果这是真的那么当我加载一个以上的人的列表时,EF中的一些时髦的黑魔法说:“我在列表中看到2个项目,我将不会使用我刚刚插入的缓存人员”。

有什么想法吗?

0 个答案:

没有答案