Я знаю, как реализовать распределенную транзакцию при выполнении запросов к двум БД MSSQL с использованием DTC и класса TransactionScope
. Существуют ли варианты инфраструктуры для Oracle в Windows и Oracle в * nix, которые предоставляют одинаковую службу и будут работать с одним и тем же кодом, E.G.:
try
{
using (var transactionScope = new TransactionScope(TransactionScopeOption.Required))
using (var connection1 = new SqlConnection("{conectionString1}"))
using (var connection2 = new SqlConnection("{connectionString2"))
{
var command = connection1.CreateCommand();
command.CommandText = "insert into test values ('TEST') select @@identity";
connection1.Open();
var newRowId = command.ExecuteScalar();
Console.WriteLine("Inserted new row in connection 1 with ID : {0}", newRowId);
//transaction promoted on second connection open
connection2.Open();
command = connection2.CreateCommand();
command.CommandText = "set identity_insert TEST on";
command.ExecuteNonQuery();
command.CommandText = string.Format("insert into test (Id, Text) values ({0},'TEST')", newRowId);
command.ExecuteNonQuery();
Console.WriteLine("Inserted new row in connection 2");
transactionScope.Complete();
}
Console.WriteLine("Transaction commited");
}
catch (Exception)
{
Console.WriteLine("Transaction rolled back");
}