我正在使用Entity Framework,刚刚从TransactionScope
了解了System.Transactions
类。这些环境事务似乎自动用于在事务范围内打开的所有新数据库连接。使用它的人似乎也使用短期数据库连接。似乎多个连接可以成为同一事务的一部分。
但我需要在现有数据库连接上使用几个低级命令的事务。我习惯了更传统的方法,在这种方法中,您打开数据库连接,将其保留在应用程序的运行时(主要是桌面),并在该单个连接上运行命令。因此,我创建自己的DbCommand
实例就像在EF之前单独使用ADO.NET一样。这些命令具有Transaction
属性,可以设置为从连接的DbTransaction
方法获取的BeginTransaction
实例。
这如何与System.Transactions.Transaction
课一起工作?如何将自制的数据库命令添加到此类环境事务中?
我尝试过DbConnection.EnlistTransaction
方法,但是我会为每个创建的命令调用它。虽然SQL Server乐于接受,但PostgreSQL(Npgsql)拒绝它,因为它不支持嵌套事务。 (但它仍然是我在这里使用的相同事务实例。)SQLite基本上也可以工作,但在传递null
时失败,这意味着“没有事务”。
我正在寻找一种解决方案,允许我将DbCommand
与支持许多主要ADO.NET提供程序的实体框架事务机制一起使用。