.NET Core не поддържа разпределени транзакции, защото ще изисква различен мениджър на транзакции на всяка платформа. Може да се появи в бъдеще (тук проблемът е в ход), но засега всяка транзакция, която изисква два различни мениджъра на ресурси, ще предизвика това изключение.
Вместо това можете да координирате отделни транзакции. Накарайте две отделни транзакции да завършат работата си и след това да ги ангажирате и двете. Има възможност че първият комит е успешен, а вторият е неуспешен, но за SQL Server това би било много рядко явление. Нещо като:
_db1UOW.Begin(); //creating sql transaction
await _db1UOW.IDenialDetailsRepositorydb1.InsertDenialDetails(denialsDetails);
await _db1UOW.IRuleDetailsRepositorydb1.InsertRulesDetails(rulesDetails);
_db2UOW.Begin(); //creating sql transaction
await _db2UOW.IRuleDetailsRepository.GetRulesDetails();
await _db2UOW.IDenialDetailsRepository.InsertDenialDetails(denialsDetails);
var data = await _db2UOW.IRuleDetailsRepository.InsertRulesDetails(rulesDetails);
_db1UOW.Commit(); //commitng sql transaction
try
{
_db2UOW.Commit(); //commitng sql transaction
}
catch (Exception ex)
{
LogError("Second transaction failed to commit after first one committed. Administrators may need to fix stuff");
throw;
}
Или ако двете бази данни са на един и същ сървър, можете да използвате запитвания за кръстосани бази данни с една SqlConnection, за да включите промените в една транзакция на SQL Server.