.NET Core không hỗ trợ Giao dịch phân tán vì nó sẽ yêu cầu một trình quản lý giao dịch khác nhau trên mỗi nền tảng. Nó có thể xuất hiện trong tương lai (đây là sự cố đang diễn ra), nhưng hiện tại, bất kỳ Giao dịch nào yêu cầu hai trình quản lý tài nguyên khác nhau sẽ đưa ra ngoại lệ này.
Thay vào đó, bạn có thể điều phối các giao dịch riêng biệt. Yêu cầu hai giao dịch riêng biệt hoàn thành công việc của họ, và sau đó cam kết cả hai. Có một khả năng rằng cam kết đầu tiên thành công và cam kết thứ hai không thành công, nhưng đối với SQL Server, đó sẽ là một điều rất hiếm khi xảy ra. Một cái gì đó như:
_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;
}
Hoặc nếu hai cơ sở dữ liệu nằm trên cùng một máy chủ, bạn có thể sử dụng các truy vấn cơ sở dữ liệu chéo với một SqlConnection duy nhất để tranh thủ các thay đổi trong một giao dịch SQL Server.