对单个DbCommands使用环境事务

时间:2015-08-24 10:06:44

标签: .net entity-framework transactions ado.net

我正在使用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提供程序的实体框架事务机制一起使用。

0 个答案:

没有答案