Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Transactionscope genera un'eccezione questa piattaforma non supporta le transazioni distribuite durante l'apertura dell'oggetto connessione

.NET Core non supporta le transazioni distribuite perché richiederebbe un gestore transazioni diverso su ciascuna piattaforma. Potrebbe apparire in futuro (ecco il problema in corso), ma per ora qualsiasi transazione che richiederebbe due diversi gestori di risorse genererà questa eccezione.

Invece puoi coordinare transazioni separate. Chiedi a due transazioni separate di completare il loro lavoro, quindi esegui il commit di entrambe. C'è una possibilità che il primo commit ha esito positivo e il secondo ha esito negativo, ma per SQL Server sarebbe un evento molto raro. Qualcosa come:

            _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;
            }

Oppure, se i due database si trovano sullo stesso server, puoi utilizzare query tra database con un unico SqlConnection per integrare le modifiche in un'unica transazione di SQL Server.