Я разработал, как это сделать: секрет в методе RegisterSynchronization ITransaction NHibernate.
В качестве примера, вот как я могу отправить электронное письмо клиенту, только когда транзакция совершена:
public class NotifyCustomerEmail
{
private void MailMessage { get; set; }
public void SendAsyncOnceTransactionCommits()
{
if (MailMessage == null)
ComposeMailMessage();
NHibernateSessionManager
.CurrentSession
.Transaction
.RegisterSynchronization(new SendEmailSynchronization(this.MailMessage));
}
}