.NET Core stöder inte distribuerade transaktioner eftersom det skulle kräva en annan transaktionshanterare på varje plattform. Det kan dyka upp i framtiden (här är problemet pågående), men för närvarande kommer alla transaktioner som kräver två olika resurshanterare att orsaka detta undantag.
Istället kan du koordinera separata transaktioner. Låt två separata transaktioner slutföra sitt arbete och utför sedan dem båda. Det finns en möjlighet att den första commiten lyckas och den andra misslyckas, men för SQL Server skulle det vara en mycket sällsynt händelse. Något i stil med:
_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;
}
Eller om de två databaserna finns på samma server kan du använda korsdatabasfrågor med en enda SqlConnection för att samla in ändringarna i en enda SQL Server-transaktion.