这个例子(C#,.NetFramework 4.7.1)展示了我们如何可以持久化到数据库,即使代码被包装在一个TransactionScope
. 第一个insert
将被回滚,第二个insert
将在没有事务的情况下插入。
请参阅我的相关帖子,我在其中寻求有关如何检测此问题的帮助。
using (var transactionScope = new TransactionScope())
{
using (var connection = new SqlConnection("Server=localhost;Database=TestDB;Trusted_Connection=True"))
{
connection.Open();
new SqlCommand($"INSERT INTO TestTable VALUES('This will be rolled back later')", connection).ExecuteNonQuery();
var someNestedTransaction = connection.BeginTransaction();
someNestedTransaction.Rollback();
new SqlCommand($"INSERT INTO TestTable VALUES('This is not in a transaction, and will be committed')", connection).ExecuteNonQuery();
}
throw new Exception("Exiting.");
transactionScope.Complete();
}