Кажется, это обычная проблема, но я не знаю, как лучше ее решить.Я хочу иметь возможность отправлять объект в представление, вносить изменения в объект в представлении, но затем отменять (удалять) эти изменения, если пользователь отменяет представление.Как правильно это сделать.
Вот два варианта, которые у меня есть, но я думаю, что должны быть другие, которые лучше
1) Возьмите сущность, создайте клон, отправьте клонв представление ... если изменения приняты, обновите исходную сущность со значениями клона
2) Отправьте сущность в представление, если пользователь отменяет, удалите сущность из кэша NHibernate и перезагрузите ее избаза данных
Для (2) проблема для меня заключается в том, что на старую сущность все еще можно ссылаться в моем проекте после ее удаления из кэша.
Редактировать:
Хорошо, так что метод evict - это путь, если я реализую метод (2).Спасибо, я не мог вспомнить детали этого.Тем не менее, проблема просмотра объектов, ссылающихся на мои старые выселенные сущности, усложняет проблему.Я не могу просто сделать так, чтобы мое представление автоматически обновлялось до новой сущности, не имея собственного кода в каждом из них, который можно было бы перепривязать, когда поднялось мое собственное событие выселения.И переплетение не может быть тривиальным в некоторых случаях.Мне нужно подумать об этом еще немного, поскольку я могу быть слишком сложным, но в данный момент этот метод кажется более хитрым.
Я подозреваю, что я застряну с методом (1), который имеет свой собственный набор проблемно подожду немного дольше, чтобы узнать, есть ли у кого-нибудь еще идеи.
Редактировать 2 : Только что нашел это.Я думаю, что он в значительной степени охватывает ответ подробно и поставляется с отличным демонстрационным проектом - Создание настольного приложения To-Do с помощью NHibernate - http://msdn.microsoft.com/en-us/magazine/ee819139.aspx
В дополнение к этому, NHibernate имеетфункция Session.Refresh (Object entity) , которая, кажется, решает точную проблему.Поэтому, когда объект изменяется, но затем отменяется перед сохранением, я могу просто вызвать Session.Refresh, чтобы перезагрузить его из базы данных и отменить изменения.