Postgresql Npgsql、TransactionScope和准备好的事务
有人能说我可以将npgsql与TransactionScope一起使用吗 在此手册中作为示例提供的代码:不起作用。它只是在服务器上创建两个准备好的事务 我的问题和这个问题一样: 在TransactionScope中使用npgsql有什么解决方案吗 UPD: 首先,我的目标是: 我需要在我的软件中的单个逻辑转换中使用两个连接。最好的解决方案是TransactionScope。Npgsql声明支持系统事务中的登记 然后我的麻烦来了: 我使用文档中的代码,此代码将执行以下操作:Postgresql Npgsql、TransactionScope和准备好的事务,postgresql,transactions,prepared-statement,distributed-transactions,npgsql,Postgresql,Transactions,Prepared Statement,Distributed Transactions,Npgsql,有人能说我可以将npgsql与TransactionScope一起使用吗 在此手册中作为示例提供的代码:不起作用。它只是在服务器上创建两个准备好的事务 我的问题和这个问题一样: 在TransactionScope中使用npgsql有什么解决方案吗 UPD: 首先,我的目标是: 我需要在我的软件中的单个逻辑转换中使用两个连接。最好的解决方案是TransactionScope。Npgsql声明支持系统事务中的登记 然后我的麻烦来了: 我使用文档中的代码,此代码将执行以下操作: 创建事务范围 打开第一
您可以使用文档中的代码重复此错误。参考Devart free library工作正确。在讨论答案之前,需要明确三个独立的概念
NpgsqlCommand.prepare()
方法创建NpgsqlConnection.BeginTransaction()
方法创建TransactionScope
构造函数创建您自己的事务管理器我强烈建议不要尝试创建自己的临时事务管理器。事务管理器是一个复杂而微妙的软件,很难正确操作,如果操作不当,可能会产生严重的负面后果在参考文档页面中,有以合理方式使用交易和准备的报表的示例。名为System.Transactions的功能使用了
TransactionScope
类,它似乎不需要您去做您想做的事情,而且似乎是让您陷入麻烦的原因。请看仅使用conn.BeginTransaction()
的示例,我不需要准备事务。npgsql驱动程序中存在问题。若我创建TransactionContext,那个么插入一些东西并抛出异常(不在TransactionContext上调用Complete),npgsql将在服务器上创建准备好的事务。此事务阻止表,并且没有人提交或回滚此事务。这是个问题,标题没问题。当我将事务与手册中的代码一起使用时(请参阅相关链接),npgsql驱动程序会创建准备好的事务。此事务阻塞表,无人提交\回滚它。我正在努力寻找解决方法。这是手册中的copypaste。您能澄清一下为什么需要跨两个连接的单个事务吗?(例如,它们是否在不同的服务器上?)此外,当处于问题状态时,您在SELECT*FROM pg_prepared_xacts
上看到了什么?我看到了两个预处理的事务。我使用这个视图进行诊断。首先,thx为您提供答案。我将更新问题以更好地描述情况。添加一些额外的描述。它开始听起来像系统。npgsql的事务功能可能不完全稳定。如果您真的需要分布式事务,您可能需要研究不同的事务管理器产品,或者向支持该功能的人提出问题。Y