2010-07-14 4 views
0

Когда кнопка сохранения нажата, следующий код запускается [PersistenceSession это свойство, возвращающее экземпляр ISession]:NHibernate - грязный ISession не обновляя

_storedWill = PersistenceSession.Load<StoredWill>(_storedWillId); 
_storedWill.WillReference = txtWillReference.Text; 
_storedWill.IntroducerReference = txtIntroducerReference.Text; 
//A stack of other properties of the _storedWill object assigned 
PersistenceSession.SaveOrUpdate(_storedWill); 

точек останова устанавливается на последней строке показывает, что PersistenceSession. IsDirty() истинно.

Однако никакого обновления SQL не генерируется. Кто-нибудь может подумать, почему?

Благодаря

David

ответ

1

Вы должны Flush сессию, чтобы иметь обновления, отправленные в базу данных. SaveOrUpdate ничего не отправит в базу данных, если вы не сохраняете вновь созданный объект, значения идентификатора которого генерируются в базе данных. Поскольку вы просто обновляете, все это гарантирует, что объект _storedWill связан с ISession, который возвращается объектом PersistenceSession.

+0

О, это ты снова, с тромбоном! Как трюки? :) Или вы можете создать ITransaction и зафиксировать его. Я не уверен в плюсах/минусах каждого подхода. – David

+0

:) Прекрасное спасибо. Не уверен, что подход ITransaction попытается использовать распределенную транзакцию, что, конечно, может быть проблематичным в определенных средах из-за возможных требований к порту брандмауэра. –

Смежные вопросы