Вы все еще можете отделить хранилище от транзакции.Главное, чем вы должны управлять, это жизненный цикл вашего сеанса.
В вашем менеджере транзакций вы можете написать что-то вроде
public class TransactionManager
{
private ISession session;
public TransactionManager(ISession session)
{
this.session = session;
}
public void BeginTransaction()
{
session.BeginTransaction();
}
public void CommitTransaction()
{
session.Transaction.Commit();
}
}
Тогда в вашем хранилище вы просто добавите сеанс
public class Repository
{
private ISession session;
public Repository(ISession session)
{
this.session = session;
}
public T Get<T>(int id)
{
return session.Get<T>(id);
}
}
Если вы используете тот же сеанс в диспетчере транзакций, что и хранилище.Ваш репозиторий будет работать с явной транзакцией.