sql >> Databáze >  >> RDS >> Sqlserver

Transactionscope vyvolání výjimky tato platforma nepodporuje distribuované transakce při otevírání objektu připojení

.NET Core nepodporuje distribuované transakce, protože by to vyžadovalo jiného správce transakcí na každé platformě. Může se objevit v budoucnu (zde je problém ve vývoji), ale prozatím tuto výjimku vyvolá jakákoli transakce, která by vyžadovala dva různé správce zdrojů.

Místo toho můžete koordinovat samostatné transakce. Nechte dvě samostatné transakce dokončit svou práci a poté je obě potvrďte. Existuje možnost že první potvrzení bude úspěšné a druhé se nezdaří, ale pro SQL Server by to byl velmi vzácný jev. Něco jako:

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

Nebo pokud jsou dvě databáze na stejném serveru, můžete použít mezidatabázové dotazy s jediným SqlConnection k zařazení změn do jediné transakce SQL Server.




  1. Jak funguje funkce TO_BASE64() v MySQL

  2. Úvod do fulltextového vyhledávání v MariaDB

  3. Importujte data do databáze MySQL

  4. jak bezpečné jsou připravené výpisy CHOP