MVC使用实体框架访问链接表值

时间:2016-06-18 11:35:28

标签: asp.net-mvc entity-framework

我是实体框架的新手,我正试图了解它。我习惯于以示例为基础编写具有我需要的所有数据的存储过程。

我的印象是,我可以直接使用实体框架从特定表中获取所有值,包括外键值,而无需编写连接数据的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(),它确实有效,但我真的不想让它保持开放状态,有没有办法让它继续使用?

提前致谢。

1 个答案:

答案 0 :(得分:1)

正确,您已经处理了在using语句中的上下文,因此从那时起尝试访问的任何内容都将无法延迟加载。延迟加载的缺点是它会为你正在迭代的每个病人执行性别查询,这很方便,但很糟糕!我会在查询时使用Include加载相关表。

您需要新的导入:

using System.Data.Entity;

然后包括相关表格:

var patients = context.Patients.Include(p => p.Gender).ToList();

这将导致一个查询将加入您的"性别"表格,您应该可以在视图中输出item.Gender.GenderDesc