C# DbContext get在使用区域内释放

C# DbContext get在使用区域内释放,c#,dbcontext,dispose,using,invalidoperationexception,C#,Dbcontext,Dispose,Using,Invalidoperationexception,我刚刚发现,当我尝试在DbContext中的DbSet上使用.Add方法时,出现以下异常: System.InvalidOperationException:无法完成操作,因为DbContext已被释放 此堆栈跟踪将我带回此方法的第238行: 现在,这个方法确实使用了另外两个方法CheckForBleKeyInDb和CheckForMpSwitchInDb,它们使用自己的using_db=new BeheerContext,但由于某种原因,这不会生成任何错误 测试变量不会生成任何异常,可能是因

我刚刚发现,当我尝试在DbContext中的DbSet上使用.Add方法时,出现以下异常:

System.InvalidOperationException:无法完成操作,因为DbContext已被释放

此堆栈跟踪将我带回此方法的第238行:

现在,这个方法确实使用了另外两个方法CheckForBleKeyInDb和CheckForMpSwitchInDb,它们使用自己的using_db=new BeheerContext,但由于某种原因,这不会生成任何错误

测试变量不会生成任何异常,可能是因为它们实际上没有连接到数据库,至少我猜是这样


我想知道到底是什么导致了这个异常,以及我如何防止它。

取出sub调用中使用的任何sub。系统的体系结构不知道您希望在某些内容超出范围后使用它。找出有问题的用法并删除它们,只使用整体用法来完成工作

取出sub调用中使用的任何sub。系统的体系结构不知道您希望在某些内容超出范围后使用它。找出有问题的用法并删除它们,只使用整体用法来完成工作

不要将上下文用作类中的字段,那么所有方法都将共享它,并将在其using语句结束时处理它

现在这个方法确实使用了另外两种方法 CheckForBleKeyInDb和CheckFormsSwitchInDb使用自己的 使用_db=new BeheerContext,但这不会生成任何错误 出于某种原因

因此,在第一次调用这些方法之后,您的上下文也被释放

而是在methodvar _db=…]中创建它们:

测试变量不会生成异常,因为它们不会从表中进行选择。例如,如果使用

var test1 = _db.BleKeys.First();

不要在类中使用上下文作为字段,那么所有方法都将共享它,并将在其using语句结束时处理它

现在这个方法确实使用了另外两种方法 CheckForBleKeyInDb和CheckFormsSwitchInDb使用自己的 使用_db=new BeheerContext,但这不会生成任何错误 出于某种原因

因此,在第一次调用这些方法之后,您的上下文也被释放

而是在methodvar _db=…]中创建它们:

测试变量不会生成异常,因为它们不会从表中进行选择。例如,如果使用

var test1 = _db.BleKeys.First();

您需要在本地分配数据库。事实上,正是这些其他方法在处理db和dbset。您需要提供实际的代码,而不是使用图片。它们对于更好地评估需要在本地分配db的问题没有多大帮助。事实上,正是这些其他方法在处理db和dbset。您需要提供实际的代码,而不是使用图片。它们对更好地评估问题没有多大帮助