我正在使用一个名为ECO的对象持久性框架来将数据更新到 SQL Server。我注意到,如果我创建一个 TransactionScope,然后在我的第一个事务提交之后但在我的第二个事务提交之前故意抛出异常,则第一个数据库被更新,而第二个则没有。
我认为一旦分布式事务协调器在主数据库上运行,我只需围绕大量更新创建 TransactionScope 就可以了?
谁能想到为什么这会允许第一个数据库更新但第二个数据库不更新的情况?
我正在使用一个名为ECO的对象持久性框架来将数据更新到 SQL Server。我注意到,如果我创建一个 TransactionScope,然后在我的第一个事务提交之后但在我的第二个事务提交之前故意抛出异常,则第一个数据库被更新,而第二个则没有。
我认为一旦分布式事务协调器在主数据库上运行,我只需围绕大量更新创建 TransactionScope 就可以了?
谁能想到为什么这会允许第一个数据库更新但第二个数据库不更新的情况?
知道了!
ECO 支持以下数据库...
今天早上我记得其中一些不支持连接池,所以在一个抽象的 PersistenceMapper 类 ECO 上实现了自己的连接池。这就是发生的事情
因此,该连接未在当前分布式事务中登记。考虑到 SqlConnection 自己进行池化,将 PersistenceMapperSqlServer.MaxPoolSize 设置为零是可以接受的。
现在它使用 SqlConnection 组件来处理连接的创建/处置,该组件不仅将连接池化,而且还可以正确处理分布式事务!
我已经写信给开发人员,让他们知道他们应该将此属性标记为过时。