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