我的数据库使用Entity表进行设置,该表具有Ref_Type导航属性(以及引用TypeID的FK)。 Type表有一个Ref_Department,相同的FK设置。最后,Department表有一个Ref_Locale和相同的FK设置。
我将实体保存在列表中,列表是单例的属性。它创建如下;
private Singleton()
{
using (Database db = new Database())
{
List<Entities> EntityList = db.Entities.ToList<Entities>();
}
}
这很好,导航属性已全部加载,我可以访问其中任何一个。 当我按如下方式更新实体条目时出现问题;
public void UpdateEntity(Entities oldEnt, Entities newEnt)
{
using (Database db = new Database())
{
Entities ent = db.Entities.Where(e => e.EntityName == oldEnt.EntityName).FirstOrDefault();
ent.EntityName = newEnt.EntityName;
ent.EntityEmail = newEnt.EntityEmail;
...
ent.EntityType_ID = newEnt.EntityType_ID;
db.SaveChanges();
}
RefreshEntities();
}
public void RefreshEntities()
{
using (Database db = new Database())
{
db.Configuration.LazyLoadingEnabled = false;
db.SaveChanges();
EntityList = db.Entities.Include("Ref_EntityType").Include("Ref_EntityPosition").ToList<Entities>();
}
}
Ref_Entity正确加载,但是在Ref_Entity中,Ref_Department只是null。我试过在我的构造函数中使用db.Entities.ToList<Entities>();
,没有骰子。正如你所看到的,我也试过关闭LazyLoading(我想我可能需要调用SaveChanges()来实际应用标志)。我也试过.Include(“Ref_Department”),但它只是抱怨实体不存在,这是有道理的。
我传递给UpdateEntity方法的newEnt没有初始化Ref_Type,我假设UpdateEntity方法中没有任何改变的东西会保持不变......
所以现在我对于发生了什么以及如何解决这个问题感到有点失落。如果有人可以帮助解释我出错的地方,或者给我一些关于如何修复我的代码以使其工作的指示,那就太棒了。
答案 0 :(得分:1)
一时兴起,我将RefreshEntities()
修改为;
EntityList = db.Entities.Include("Ref_EntityPosition").Include("Ref_EntityType").
Include("Ref_EntityType.Ref_Department").
Include("Ref_EntityType.Ref_Department.Ref_Locale").ToList<Entities>();
现在我得到了所有的参考资料。
我仍然不确定为什么它会加载构造函数中的所有引用而不是RefreshEntities()
方法,即使调用是相同的,但这解决了问题,所以我很高兴离开就是这样。