我的数据库中有一个人员和职业表。当我创建一个人时,他们的默认 OccupationId 为空。
假设我创建了一个人,他们的 ID 是 11。另外,还有一个职业,比如说潜水员,它的 ID 是 53。然后我执行以下操作:
using (var context = new DbEntities())
{
person.OccupationId; //currently null
person.Occupation; //currently null
var person = context.People.First(x => x.Id == 11);
person.OccupationId=53;
context.SaveChanges();
var occupation = person.Occupation.Description; //Exception: Occupation is null
}
代码在最后一行失败,因为职业最初为空,并且新职业在保存后没有延迟加载。如果此人在运行此代码之前有一个职业,并且旧的职业是延迟加载的,那么新的职业将在保存后出现。
换句话说,如果该人首先拥有清洁工职业,那么这将起作用:
using (var context = new DbEntities())
{
var person = context.People.First(x => x.Id == 11);
var occupation = person.Occupation.Description; //this would say Janitor
person.OccupationId=53;
context.SaveChanges();
var occupation = person.Occupation.Description; //This would say Diver
}
如果初始职业为空,是否有办法在保存后延迟加载新职业?