【发布时间】:2015-02-10 13:41:31
【问题描述】:
我对事务和实体框架 5 没有任何运气。我有以下代码:
context.Database.Connection.Open();
transaction = context.Database.Connection.BeginTransaction(IsolationLevel.Serializable);
//some work happens
context.SaveChanges();
//some additional work
context.SaveChanges();
transaction.Commit();
在第一个 context.SaveChanges 调用中,我得到一个异常:“连接已经是本地或分布式事务的一部分”
现在我实际上只是在做一个简单的概念证明,我所做的只是附加一个实体,将其标记为已修改,然后调用保存更改。
作为故障排除处理,我放置了一个事件处理程序,用于处理连接状态何时发生变化并在其中设置断点。这样做,我验证了在我开始事务和调用保存更改之间的连接没有关闭。
任何帮助弄清楚它为什么给我这个例外将不胜感激。
【问题讨论】:
-
我还没有找到任何关于事务如何与 EF 5 一起工作的信息。我找到了一篇关于 EF 6 和更新版本的事务的文章,但我们没有使用 EF 6,因为 oracle 数据访问 dll 不是t 生产就绪。我最初的概念证明似乎表现得像 EF 不希望在事务期间对 context.SaveChanges 进行任何调用。如果我取出中间保存更改并在提交后仅保存更改,它在我的琐碎 POC 中表现正确。
-
什么是堆栈跟踪?
-
堆栈跟踪深入到 oracle 数据访问 dll 并出现错误。从逻辑上讲,我看到任何 context.savechanges 是一个事务,所以看来 EF 在幕后做了一个事务。因此,在这方面,自己开始交易的概念在实体框架中显得毫无意义。
标签: entity-framework transactions entity-framework-5