.NET Core unterstützt keine verteilten Transaktionen, da hierfür auf jeder Plattform ein anderer Transaktions-Manager erforderlich wäre. Es kann in Zukunft auftreten (hier ist das Problem in Bearbeitung), aber im Moment wird jede Transaktion, die zwei verschiedene Ressourcenmanager erfordern würde, diese Ausnahme auslösen.
Stattdessen können Sie separate Transaktionen koordinieren. Lassen Sie zwei separate Transaktionen ihre Arbeit abschließen und schreiben Sie sie dann beide fest. Es gibt eine Möglichkeit dass der erste Commit erfolgreich ist und der zweite fehlschlägt, aber für SQL Server wäre das ein sehr seltenes Ereignis. Etwas wie:
_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;
}
Oder wenn sich die beiden Datenbanken auf demselben Server befinden, können Sie datenbankübergreifende Abfragen mit einer einzigen SqlConnection verwenden, um die Änderungen in einer einzigen SQL Server-Transaktion einzutragen.