.NET Core ondersteunt geen gedistribueerde transacties omdat hiervoor op elk platform een andere transactiebeheerder nodig is. Het kan in de toekomst verschijnen (hier is het huidige probleem), maar voorlopig zal elke transactie waarvoor twee verschillende resourcemanagers nodig zijn, deze uitzondering veroorzaken.
In plaats daarvan kunt u afzonderlijke transacties coördineren. Laat twee afzonderlijke transacties hun werk voltooien en leg ze vervolgens allebei vast. Er is een mogelijkheid dat de eerste commit slaagt en de tweede mislukt, maar voor SQL Server zou dat een zeer zeldzame gebeurtenis zijn. Iets als:
_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;
}
Of als de twee databases zich op dezelfde server bevinden, kunt u query's tussen databases gebruiken met een enkele SqlConnection om de wijzigingen door te voeren in een enkele SQL Server-transactie.