Как сделать, чтобы NHibernate автоматически изменял «обновленный» столбец - PullRequest
2 голосов
/ 17 марта 2010

Я применяю NHibernate к существующему проекту, где таблицы и столбцы уже определены и исправлены.

База данных MS-SQL-2008. NHibernate 2.1.2

Во многих таблицах есть столбец типа timestamp с именем «ReplicationID», а также столбец типа datetime с именем «UpdatedDT».

Я понимаю, что мог бы использовать элемент <timestamp> файла сопоставления для описания столбца "ReplicationID", который позволит NHibernate управлять этим столбцом.

Можно ли сделать так, чтобы NHibernate автоматически обновлял столбец updatedDT при обновлении строки? Я полагаю, я мог бы попытаться сопоставить свойство updatedDT типа timestamp, но у этого есть другие побочные эффекты.

Ответы [ 2 ]

4 голосов
/ 17 марта 2010

Вы можете использовать генерируемый = "всегда" для свойств, которые установлены / обновлены базой данных. Затем NHiberante выдаст выбор для этого столбца после оператора вставки / обновления.

пример:

<property name="CreatedOn" 
          insert="false" update="false" type="Timestamp" generated="insert" />
<property name="UpdatedOn" 
          insert="false" update="false" type="Timestamp" generated="always" />

То же самое работает для версии / отметки времени:

 <version name="_timeStamp" generated="always" unsaved-value="null" type="BinaryBlob"   access="field">
      <column name="TimeStamp" not-null="false" sql-type="timestamp"/>
 </version>
2 голосов
/ 17 марта 2010

Вам необходимо реализовать прослушиватель событий. Я сделал это, и это очень легко. Я рекомендую использовать интерфейс для определения ваших сущностей, которые требуют обновления. Этот пост описывает все это:

http://ayende.com/Blog/archive/2009/04/29/nhibernate-ipreupdateeventlistener-amp-ipreinserteventlistener.aspx

http://knol.google.com/k/fabio-maulo/nhibernate-chapter-11/1nr4enxv3dpeq/14#

// свободная регистрация http://ferventcoder.com/archive/2009/11/18/nhibernate-event-listener-registration-with-fluent-nhibernate.aspx

...