DbContext get被置于使用区域内

时间:2017-08-17 14:34:01

标签: c# dbcontext dispose using invalidoperationexception

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

  

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

这个堆栈跟踪让我回到了这个方法的第238行: Method

现在确实,此方法使用了另外两种方法(CheckForBleKeyInDbCheckForMpSwitchInDb),这些方法使用了自己的using(_db = new BeheerContext()),但由于某种原因,这不会产生任何错误。

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

我想知道究竟是什么导致了这个异常,以及我如何阻止它。

2 个答案:

答案 0 :(得分:4)

不要在类中使用context作为字段,然后所有方法共享它并将它们放在using语句的末尾。

  

现在确实这个方法使用了另外两种方法   (CheckForBleKeyInDbCheckForMpSwitchInDb)使用自己的   using(_db = new BeheerContext())但这不会产生任何错误   出于某种原因。

因此,在第一次调用这些方法后,您的上下文也会被处理掉。

而是在方法(var _db = ...)中创建它们:

using(var _db = new BeheerContext())
{
   //...
}

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

,你会得到同样的例外
var test1 = _db.BleKeys.First();

答案 1 :(得分:2)

取出子调用中的任何子using。系统的体系结构不知道您想要在范围之后使用某些东西。找到有问题的usings并删除它们,只有整体using才能完成工作。