0

我有一个简单的控制器方法(通过 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 个项目,我不会使用我刚刚插入的缓存的人”。

有任何想法吗?

4

0 回答 0