.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トランザクションに変更を含めることができます。