sql >> Base de Datos >  >> RDS >> Sqlserver

Transactionscope arroja una excepción:esta plataforma no admite transacciones distribuidas al abrir el objeto de conexión

.NET Core no admite transacciones distribuidas porque requeriría un administrador de transacciones diferente en cada plataforma. Puede aparecer en el futuro (aquí está el problema en curso), pero por ahora cualquier Transacción que requiera dos administradores de recursos diferentes generará esta excepción.

En su lugar, puede coordinar transacciones separadas. Haga que dos transacciones separadas completen su trabajo y luego confírmelas a ambas. Hay una posibilidad que la primera confirmación tiene éxito y la segunda falla, pero para SQL Server, eso sería una ocurrencia muy 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;
            }

O si las dos bases de datos están en el mismo servidor, puede usar consultas entre bases de datos con una sola SqlConnection para registrar los cambios en una sola transacción de SQL Server.