Когда я делаю это:
Cat x = Session.Load<Cat>(123);
x.Name = "fritz";
Session.Flush();
NHibernate обнаруживает изменение и ОБНОВЛЯЕТ БД. Но когда я делаю это:
Cat x = new Cat();
Session.Save(x);
x.Name = "fritz";
Session.Flush();
Я получаю NULL для имени, потому что это было то, что было, когда я звонил Session.Save()
. Почему NHibernate не обнаруживает изменения или, что еще лучше, принимает значения для оператора INSERT во время Flush()
?
Добавлено: Для пояснения: Session.FlushMode
установлено на None
, поэтому автоматических сбросов пока я не скажу. Я также использую первичные ключи GUID (с генератором guid.comb).
Причина, по которой я это делаю, заключается в том, что я использую Сессию как трекер "грязности". Я пишу приложение для Windows Forms, и каждая из моих форм имеет отдельный сеанс, который длится столько же, сколько и форма. Сессия по возможности максимально отключена, чтобы у меня не заканчивались соединения ADO.NET (это приложение MDI, и нет ограничений на количество форм, которые можно открыть). Каждая форма также имеет кнопку «ОК» и кнопку «Отмена». Кнопка «ОК» вызывает Session.Flush()
, а затем закрывает форму; кнопка «Отмена» просто закрывает форму и молча отменяет все изменения, сделанные пользователем.
Ну, по крайней мере, это то, что я хотел бы. Вышеуказанная ошибка вызывает у меня проблемы.