不同数据库的交易

moh*_*sti 2 c# asp.net transactions transactionscope

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

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

beginTransaction(){
  dll1.class.Insert(data);
  dll2.className.Insert(relatedData);
  ....
}
Run Code Online (Sandbox Code Playgroud)

Ode*_*ded 5

你正在寻找TransactionScope班级:

使代码块具有事务性.

用法示例:

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

  tx.Complete(); // if not executed, transaction will rollback
}
Run Code Online (Sandbox Code Playgroud)

正如@Anders Abel 评论的那样,运行事务中涉及的数据库的服务器将需要在DB服务器和客户端计算机上正确运行和配置MSDTC服务.该DTCPing工具在这方面是非常有帮助的.

正如Steve B 评论的那样,这里假设所有数据库和相关驱动程序都支持分布式事务登记.检查你的文件......

  • 请注意,使用`TransactionScope`使事务跨越两个数据库将需要MSDTC服务在数据库服务器上运行,具有正确的网络配置(在非域环境中获得安全可能很棘手). (5认同)
  • @AndersAbel - 真的.这是[DTCPing](http://www.microsoft.com/en-us/download/details.aspx?id=2868)的天赐之物. (2认同)