尝试使用 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 和其他技术。
看起来您从中获取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
。