sql >> データベース >  >> RDS >> Sqlserver

Transactionscopeスロー例外このプラットフォームは、接続オブジェクトを開いている間、分散トランザクションをサポートしていません

    .NET Coreは、プラットフォームごとに異なるトランザクションマネージャーが必要になるため、分散トランザクションをサポートしていません。将来的に表示される可能性がありますが(これが進行中の問題です)、今のところ、2つの異なるリソースマネージャーを必要とするトランザクションはこの例外をスローします。

    代わりに、個別のトランザクションを調整できます。 2つの別々のトランザクションに作業を完了させてから、両方をコミットします。 可能性があります 最初のコミットは成功し、2番目のコミットは失敗しますが、SQL Serverの場合、これは非常にまれなケースです。次のようなもの:

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

    または、2つのデータベースが同じサーバー上にある場合は、単一のSqlConnectionでデータベース間クエリを使用して、単一のSQLServerトランザクションに変更を含めることができます。




    1. UPDATEとSELECTを同時に行う方法

    2. それぞれが外部キーである要素のPostgreSQL配列

    3. OracleCONNECTBYとの混同

    4. GroovySQLOracle配列関数/プロシージャアウトパラメータの登録