c# - 不同数据库的事务

标签 c# asp.net transactions transactionscope

我在项目中使用 2 个不同的 dll 连接到 2 个数据库。每个 dll 都有自己的 DAL 层。

现在在页面中我需要将一组相关数据插入到这两个数据库中。我想使用事务来确保数据插入正确。但因为我只能访问每个程序集的 Insert() 公共(public)方法,而不是 ADO.net 代码。我该如何处理这种情况? c#中有类似的东西吗?

beginTransaction(){
  dll1.class.Insert(data);
  dll2.className.Insert(relatedData);
  ....
}

最佳答案

您正在寻找TransactionScope类:

Makes a code block transactional.

使用示例:

using (var tx = new TransactionScope())
{
  dll1.class.Insert(data);
  dll2.className.Insert(relatedData);

  tx.Complete(); // if not executed, transaction will rollback
}

@Anders Abel commented ,运行事务中涉及的数据库的服务器将需要在数据库服务器和客户端计算机上正确运行和配置 MSDTC 服务。 DTCPing实用程序在这方面非常有帮助。

Steve B commented ,这里假设所有数据库和关联的驱动程序都支持分布式事务登记。检查您的文档...

关于c# - 不同数据库的事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11712436/

相关文章:

sql-server - 如何保持事务和ssis包执行相互等待?

c# - 如何在asp.net中使用定时器控件?

c# - 使用带有新 OAuth 的 C# TweetSharp 发布更新

Asp.net session 越界/混淆

java - 具有 READ COMMITTED 隔离级别的 SQL 并发 'select then update' 模式

spring - @Transactional 在 @Validated 时不起作用

javascript - 无法从具有 'aspNetHidden' CSS 类的字符串中删除 HTML 标记

c# - Azure函数: System. Private.CoreLib:无法加载文件或程序集 'System.ComponentModel.Annotations...'

c# - .OrderBy()/.OrderByDescending() 与 .FirstOrDefault()/.First()

c# - ASP.NET MVC 消息处理程序与 Web API 消息处理程序