По сути, это продолжение этого вопроса . Я начинаю чувствовать, что должен отказаться от всей идеи, но я сделаю еще один выстрел.
То, что я хочу, очень похоже на транзакцию с БД. Он должен отслеживать мои изменения в БД, а затем, в конце концов, позволить мне либо зафиксировать, либо откатить их. Если я вставлю объект, я должен вернуть его в следующем (соответствующем) запросе SELECT. Если я его удаляю, будущие запросы SELECT не должны его возвращать. И т.д.
Но есть одна загвоздка - эта транзакция будет очень продолжительной. Это началось бы, когда пользователь открыл форму (я говорю о Windows Forms здесь), и фиксация / откат был бы, когда пользователь закрыл ее (с помощью OK / Отмена). Так что это может занять от нескольких секунд до нескольких дней. Это требование исключает стандартную транзакцию БД, потому что это заблокирует таблицы / строки, к которым она прикоснулась, и другие пользователи не смогут использовать систему. Также транзакция не должна фиксировать ЛЮБЫЕ изменения в БД до тех пор, пока она не будет действительно зафиксирована. Поэтому, если один пользователь вносит некоторые изменения, другие не видят их, пока не будет нажата кнопка ОК. Это предотвращает ошибки в случае сбоя компьютера или его отключения от сети.
Я вполне в порядке, если решение накладывает ограничения на мою модель (я использую MSSQL 2008, кстати). Я могу создать БД / код так, как мне нравится. Я также согласен с мыслью, что фиксация может завершиться неудачей, потому что кто-то уже изменил один из объектов, к которым прикоснулась моя транзакция.
Есть что-нибудь подобное? Я посмотрел на NHibernate.Burrow, но я не уверен, что это то, что я хочу.
Добавлено: Это самое начало проекта, поэтому я не привязан к NHibernate. Я начал с этого, но я все еще могу легко измениться.