【发布时间】:2014-04-26 02:05:03
【问题描述】:
假设我有一个连接到 n 数据库的 Windows 窗体应用程序,同时打开了 n 连接。
我正在寻找的是一次性与所有这些数据库进行交易。
例如,如果我有 2 个数据库连接:
using (ITransaction tx1 = session1.OpenTransaction())
{
using (ITransaction tx2 = session2.OpenTransaction())
{
// Do the query thingy here
}
}
一开始写一切都很好,但是当我想到处查询时,事情就变得有点多余了,更不用说添加新连接的可能性了。
我想要的是循环所有注册的会话并将其包装在一个服务中,可能是这样的:
class TransactionManager
{
private ISession[] _sessions;
public TransactionManager(string[] connectionStrings)
{
// Initialize the sessions here
}
public function DoTransaction(string query)
{
foreach (ISession session in _sessions)
{
// What to do here? Using? Try-catch?
}
}
}
如果我在 foreach 循环中使用 using,则意味着如果连接 A 成功但连接 B 不成功,则只有连接 B 会回滚。
【问题讨论】:
标签: c# .net transactionscope