.NET Core nepodporuje distribuované transakce, protože by to vyžadovalo jiného správce transakcí na každé platformě. Může se objevit v budoucnu (zde je problém ve vývoji), ale prozatím tuto výjimku vyvolá jakákoli transakce, která by vyžadovala dva různé správce zdrojů.
Místo toho můžete koordinovat samostatné transakce. Nechte dvě samostatné transakce dokončit svou práci a poté je obě potvrďte. Existuje možnost že první potvrzení bude úspěšné a druhé se nezdaří, ale pro SQL Server by to byl velmi vzácný jev. Něco jako:
_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;
}
Nebo pokud jsou dvě databáze na stejném serveru, můžete použít mezidatabázové dotazy s jediným SqlConnection k zařazení změn do jediné transakce SQL Server.