我是实体框架的新手,我正试图了解它。我习惯于以示例为基础编写具有我需要的所有数据的存储过程。
我的印象是,我可以直接使用实体框架从特定表中获取所有值,包括外键值,而无需编写连接数据的select查询。
我的控制器中有以下内容
private void updateFrequencies(String keyCharacter){
if(characterFrequencyMap.containsKey(keyCharacter)){
int currentFrequency = characterFrequencyMap.get(keyCharacter);
characterFrequencyMap.replace(keyCharacter, currentFrequency+1);
}
else{
characterFrequencyMap.put(keyCharacter, 1);
}
}
在我看来,我有以下
public ActionResult Patient()
{
using (var context = new WaysToWellnessDB())
{
var patients = context.Patients.ToList();
return View(patients);
}
}
我有两个表,Patient和Gender,GenderId是一个外键,我试图从该表中获取GenderDesc。
我收到以下消息
ObjectContext实例已被释放,不能再用于需要连接的操作。
有人可以解释为什么我无法访问GenderDesc。如果我在我的上下文中删除using(),它确实有效,但我真的不想让它保持开放状态,有没有办法让它继续使用?
提前致谢。
答案 0 :(得分:1)
正确,您已经处理了在using语句中的上下文,因此从那时起尝试访问的任何内容都将无法延迟加载。延迟加载的缺点是它会为你正在迭代的每个病人执行性别查询,这很方便,但很糟糕!我会在查询时使用Include加载相关表。
您需要新的导入:
using System.Data.Entity;
然后包括相关表格:
var patients = context.Patients.Include(p => p.Gender).ToList();
这将导致一个查询将加入您的"性别"表格,您应该可以在视图中输出item.Gender.GenderDesc
。