Я тоже хочу это сделать, но пока не остановился на подходе из-за нехватки времени и некоторого ЯГНИ.
Вот код, который я еще не тестировал, но адаптировал из проекта SharpArch с открытым исходным кодом.Мне очень нравится интерфейс, но я, возможно, немного изменил реализацию NHib, поскольку есть некоторые вещи, которые мне не нравятся в реализации репозитория SharpArch, но вы можете судить сами.
Конечно, используя NHib session.BeginTransaction () вводит зависимости NHib, и отсутствие абстрагирования кажется противоречащим абстрагированию IRepository и всего остального.Я, например, был бы очень заинтересован в том, что вы заключаете в качестве полезной абстракции транзакций.
HTH,
Berryl
public interface IDbContext {
void CommitChanges();
IDisposable BeginTransaction();
void CommitTransaction();
void RollbackTransaction();
}
public class DbContext : IDbContext {
private readonly ISession _session;
public DbContext(ISession session)
{
Check.RequireNotNull<ISession>(session);
_session = session;
}
public void CommitChanges() { _session.Flush(); }
public IDisposable BeginTransaction() { return _session.BeginTransaction(); }
public void CommitTransaction() { _session.Transaction.Commit(); }
public void RollbackTransaction() { _session.Transaction.Rollback(); }
}