O .NET Core não oferece suporte a transações distribuídas porque exigiria um gerenciador de transações diferente em cada plataforma. Pode aparecer no futuro (aqui está o problema em andamento), mas por enquanto qualquer transação que exigiria dois gerenciadores de recursos diferentes lançará essa exceção.
Em vez disso, você pode coordenar transações separadas. Faça com que duas transações separadas concluam seu trabalho e, em seguida, confirme as duas. Existe uma possibilidade que o primeiro commit seja bem-sucedido e o segundo falhe, mas para o SQL Server, isso seria uma ocorrência muito rara. Algo como:
_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;
}
Ou se os dois bancos de dados estiverem no mesmo servidor, você poderá usar consultas entre bancos de dados com um único SqlConnection para listar as alterações em uma única transação do SQL Server.