Обновление : я видел это ( шаблон работы в сети ) после ответа.
Возможно, System.Transactions.Transaction - это то, что вам нужно.
Единица работы - это термин, который был первоначально применен к приложениям на мэйнфреймах много лет назад. Приложения будут выполнять ряд шагов. Если какой-либо из шагов завершился неудачей, база данных будет откатана до предыдущей «точки синхронизации». Приложение будет записывать новую синхронизирующую точку после успешного завершения всех шагов в единице работы. Шаги вели себя как единое целое.
Метафора эволюционировала таким образом, что в .NET мы имеем конструкцию Transaction. Работа, выполняемая с восстанавливаемыми хранилищами данных в рамках транзакции, выполняется как единое целое со свойствами ACID. Примерами таких хранилищ данных могут быть: любая современная СУБД, система массового обслуживания, такая как MSMQ, или, в Windows, файловая система или реестр (через KTM). Когда транзакция разрешается, она либо фиксирует, либо откатывает все операции во всех транзакционных хранилищах.
Я не знаю о nHibernate или конструкции ISession. Но если вы используете термин «единица работы» в традиционном смысле, то я думаю, что вам нужна транзакция.
Что касается интеграции транзакций в ASP.NET MVC - не уверен, что это будет означать. Транзакции не волнует, что такое модель пользовательского интерфейса или как вы разработали управление потоком пользовательского интерфейса. Если вы обновляете базу данных (я полагаю, «модель»), то у вас есть возможность включить это обновление в транзакцию. Действительно имеет смысл, только если у вас есть несколько обновлений, как часть одной транзакции. С другой стороны, вы не хотите, чтобы транзакции оставались открытыми в течение длительных периодов времени. блокировка базы данных приведет к конфликту и, как следствие, к снижению пропускной способности.