假设我有一个连接到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会被回滚。
TransactionScope
有一个可怕的习惯,即将多个连接升级到 MSDTC,这会导致性能非常糟糕。请小心使用。 - Haney*
着重点是否也适用于给定示例,即完全不同类型的多个数据库连接? - Timo