sql >> Databasteknik >  >> RDS >> Sqlserver

Transactionscope kastar undantag denna plattform stöder inte distribuerade transaktioner när anslutningsobjekt öppnas

.NET Core stöder inte distribuerade transaktioner eftersom det skulle kräva en annan transaktionshanterare på varje plattform. Det kan dyka upp i framtiden (här är problemet pågående), men för närvarande kommer alla transaktioner som kräver två olika resurshanterare att orsaka detta undantag.

Istället kan du koordinera separata transaktioner. Låt två separata transaktioner slutföra sitt arbete och utför sedan dem båda. Det finns en möjlighet att den första commiten lyckas och den andra misslyckas, men för SQL Server skulle det vara en mycket sällsynt händelse. Något i stil med:

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

Eller om de två databaserna finns på samma server kan du använda korsdatabasfrågor med en enda SqlConnection för att samla in ändringarna i en enda SQL Server-transaktion.




  1. MSSQL-fel "Den underliggande leverantören misslyckades vid Open"

  2. INSERT-satsen kom i konflikt med FOREIGN KEY-begränsningen - SQL Server

  3. LocalDB-distribution på klientdator

  4. Hur kör man två mysql-frågor som en i PHP/MYSQL?