尝试使用 EF4.3.1 插入实体时出现异常

本文关键字:实体 异常 插入 EF4 | 更新日期: 2023-09-27 18:32:01

我在这里看到一些看起来像我的帖子,但是我找不到我特定问题的答案。

问题是我正在尝试使用导航道具将实体插入数据库。但是我不断得到:The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.

using (EntitiesDatabase context = new EntitiesDatabase())
{
    if (UserHandler.Instance.User is Admin)
    {
        ((Admin)UserHandler.Instance.User).ProjectManagers.Add(
            new ProjectManager(firstNameTextBox.Text, lastNameTextBox.Text, usernameTextBox.Text, passwordTextBox.Text));
    }
    else if (UserHandler.Instance.User is ProjectManager)
    {
        ((ProjectManager)UserHandler.Instance.User).Developers.Add(
            new Developer(firstNameTextBox.Text, lastNameTextBox.Text, usernameTextBox.Text, passwordTextBox.Text));
    }
    context.SaveChanges();
}

在代码的第 5-6 行引发错误异常(u.ProjectManagers.Add(new ProjectManager(...))

为清楚起见: UserHandler 是保存对登录用户的引用的单节点。用户具有导航属性

    public virtual ICollection<ProjectManager> ProjectManagers { get; set; }

这实际上应该在我对上下文进行SaveChanges()后将新的项目经理插入数据库。

我已经对较小的项目(如 PluralSight 教程中的项目)进行了一些简单的测试,它确实有效......由于某种原因,这些相同的行不起作用。在我尝试将其插入导航道具之前,似乎我正在创建的新项目经理正在被处理掉。因为我永远不会到达保存更改行...

从我看到的其他答案中,我猜测using语句出于某种原因在到达末尾括号之前就处理了东西。我不明白为什么...有人可以以正确的方式指出我吗?

顺便说一句,这不是家庭作业,这是我的一个项目,我正在尝试学习 C#、EF 和其他技术。

尝试使用 EF4.3.1 插入实体时出现异常

看起来您从中获取User实例的上下文是在不同的上下文中获取的,这些上下文是释放的。

您有两个选项,要么使用相同的上下文,要么使用 ObjectContext 将实体附加到新上下文。像这样附加:

using (EntitiesDatabase context = new EntitiesDatabase())
{
  context.Attach(UserHandler.Instance.User);
  if (UserHandler.Instance.User is Admin)
  {
    ((Admin)UserHandler.Instance.User).ProjectManagers.Add(
       new ProjectManager(firstNameTextBox.Text, lastNameTextBox.Text, usernameTextBox.Text, passwordTextBox.Text));
  }
  else if (UserHandler.Instance.User is ProjectManager)
  {
    ((ProjectManager)UserHandler.Instance.User).Developers.Add(
        new Developer(firstNameTextBox.Text, lastNameTextBox.Text, usernameTextBox.Text, passwordTextBox.Text));
  }
  context.SaveChanges();
}

我的猜测是,与UserHandler.Instance.User相关的数据上下文在当前调用上下文中没有活动,并且UserHandler.Instance.User没有附加到最近实例化context