Скажем, у меня есть приложение Windows Form, которое связано с базами данных n
, при одновременном открытии соединений 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
, это означало бы, что если соединение A успешно, но соединение B не было, тогда откатывается только соединение B.