有人可以说我可以将 npgsql 与 TransactionScope 一起使用吗?
在此处的手册中作为示例提供的代码:http: //npgsql.projects.postgresql.org/docs/manual/UserManual.html不起作用。它只是在服务器上创建两个准备好的事务。
我和这个问题有同样的问题:TransactionScope and Npgsql - Prepared Transaction Issue
有没有将 npgsql 与 TransactionScope 一起使用的解决方案?
UPD:首先我的目标:我需要在我的软件中的单个逻辑事务中使用两个连接。最好的解决方案是 TransactionScope。Npgsql 声明支持系统事务中的登记。
然后麻烦了:我使用文档中的代码,此代码执行以下操作:
- 创建事务范围
- 打开第一个连接
- 打开第二个连接
- 插入第一个连接
- 插入第二个连接
- 关闭第二个连接
- 关闭第一个连接
- 调用 scope.Complete()
- 处置范围
我等一下,经过 9 步数据将完全提交给 db。事实上,在第 6 步和第 7 步,npgsql 创建了准备好的事务,而在第 9 步什么也不做。最后我有两个准备好的事务,即块数据库。并且没有人可以提交或回滚它们。
一般来说,如果我在范围内调用完成之前关闭连接(例如由于异常),npgsql 会创建阻止表的准备好的事务。我认为这不是正确的行为。我等待范围处置数据将被完全提交或完全回滚。没有任何准备好的交易。
您可以使用文档中的代码重复此错误。作为参考,Devar 免费库工作正确。