Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Transactionscope lançant une exception cette plate-forme ne prend pas en charge les transactions distribuées lors de l'ouverture de l'objet de connexion

.NET Core ne prend pas en charge les transactions distribuées, car cela nécessiterait un gestionnaire de transactions différent sur chaque plate-forme. Cela peut apparaître à l'avenir (voici le problème en cours), mais pour l'instant, toute transaction qui nécessiterait deux gestionnaires de ressources différents lèvera cette exception.

Au lieu de cela, vous pouvez coordonner des transactions distinctes. Demandez à deux transactions distinctes de terminer leur travail, puis validez-les toutes les deux. Il y a une possibilité que le premier commit réussit et que le second échoue, mais pour SQL Server, ce serait une occurrence très rare. Quelque chose comme :

            _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 si les deux bases de données se trouvent sur le même serveur, vous pouvez utiliser des requêtes inter-bases de données avec une seule SqlConnection pour inscrire les modifications dans une seule transaction SQL Server.