Что касается первого сценария, вы не хотите блокировать попытки пользователя отредактировать;ваша система никогда не масштабируется, если вы попытаетесь навязать пессимистический параллелизм.
Скорее, вы хотите использовать оптимистичный параллелизм;ваши модели будут иметь временную метку (обычно фактическое значение даты-времени или, что еще лучше, какое-то двоичное значение, гарантированно уникальное для конкретного контекста / таблицы).Большинство ORM (включая nHibernate, я уверен) поддерживают оптимистичный параллелизм;при создании обновления он будет обновлять запись только в том случае, если первичный ключ совпадает с и , отметка времени совпадает, если это не так, то вы знаете, что кто-то еще редактировал запись с последнего разаВы извлекли данные.
Для второго сценария вы можете рассмотреть Рабочий процесс Windows , который тесно интегрирован с WCF.Тем не менее, как правило, я бы имел отдельную таблицу , которая содержит информацию о неполном заказе вместе с ключом, который пользователь может использовать (возможно, идентификатор сеанса) для поиска данных.
Толькокогда вы знаете, что заказ выполнен, перемещаете ли вы данные из своей промежуточной таблицы в таблицу реальных заказов.