void RunTransaction(void Function(...)) { using (var manager = new NHibernateManager()) { var session = manager.GetSession(); using (var transaction = session.BeginTransaction()) { Function(); transaction.Commit(); } } } public delegate void TransactionParticipant(); public void RunTransaction(Action fn) { // ... fn(); // ... } RunTransaction(() => Edit(editModel, uploadedImage)); public delegate void TransactionParticipant(NHibernateSession session); fn(session); RunTransaction(s => Edit(s, editModel, uploadedImage)); void RunTransaction(System.Action anAction) { //... anAction(); //... } void SomeMethod() { } RunTransaction(SomeMethod); RunTransaction(() => { /* any code */ }); void RunTransaction()//тут указывать параметром void_функцию незачем { using (var manager = new NHibernateManager()) { var session = manager.GetSession(); using (var transaction = session.BeginTransaction()) { Function();//!ф-ия будет вызываться просто если её "видно" transaction.Commit(); } } }