Platforma .NET Core nie obsługuje transakcji rozproszonych, ponieważ wymagałoby to innego menedżera transakcji na każdej platformie. Może pojawić się w przyszłości (tutaj problem w toku), ale na razie każda transakcja, która wymagałaby dwóch różnych menedżerów zasobów, zgłosi ten wyjątek.
Zamiast tego możesz koordynować oddzielne transakcje. Niech dwie oddzielne transakcje ukończą swoją pracę, a następnie zatwierdź je obie. Istnieje możliwość że pierwsze zatwierdzenie się powiedzie, a drugie nie, ale w przypadku SQL Server byłoby to bardzo rzadkie zdarzenie. Coś takiego:
_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;
}
Lub jeśli dwie bazy danych znajdują się na tym samym serwerze, możesz użyć zapytań między bazami danych z pojedynczym połączeniem SqlConnection, aby zarejestrować zmiany w pojedynczej transakcji SQL Server.