我刚刚发现当我尝试在DbContext中的DbSet上使用.Add()
方法时,我得到以下异常:
System.InvalidOperationException:无法完成操作,因为DbContext已被释放。
现在确实,此方法使用了另外两种方法(CheckForBleKeyInDb
和CheckForMpSwitchInDb
),这些方法使用了自己的using(_db = new BeheerContext())
,但由于某种原因,这不会产生任何错误。
测试变量不会产生任何异常,可能是因为它们实际上并没有连接到数据库,至少这是我的猜测。
我想知道究竟是什么导致了这个异常,以及我如何阻止它。
答案 0 :(得分:4)
不要在类中使用context作为字段,然后所有方法共享它并将它们放在using语句的末尾。
现在确实这个方法使用了另外两种方法 (
CheckForBleKeyInDb
和CheckForMpSwitchInDb
)使用自己的using(_db = new BeheerContext())
但这不会产生任何错误 出于某种原因。
因此,在第一次调用这些方法后,您的上下文也会被处理掉。
而是在方法(var _db = ...
)中创建它们:
using(var _db = new BeheerContext())
{
//...
}
您的测试变量不会生成异常,因为它们不会从表中进行选择。如果你使用
,你会得到同样的例外var test1 = _db.BleKeys.First();
答案 1 :(得分:2)
取出子调用中的任何子using
。系统的体系结构不知道您想要在范围之后使用某些东西。找到有问题的usings
并删除它们,只有整体using
才能完成工作。