我正在将NHibernate应用于现有项目,其中已经定义并修复了表和列。
数据库是MS-SQL-2008。 NHibernate 2.1.2
许多表都有一个名为“ReplicationID”的timestamp类型的列,以及一个名为“UpdatedDT”的datetime类型的列。
我知道我可以使用映射文件的<timestamp>
元素来描述“ReplicationID”列,它将允许NHibernate管理该列。
当行更新时,是否可以让NHibernate自动更新UpdatedDT列?我想我可以尝试将UpdatedDT属性映射为timestamp类型,但这会产生其他副作用。
答案 0 :(得分:4)
您可以将generated =“always”用于数据库设置/更新的属性。然后,NHiberante将在插入/更新语句之后为此列发出一个select。
示例:
<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>
答案 1 :(得分:2)
您需要实现一个事件监听器。我做到了,这很容易。我建议使用界面来识别需要更新的实体。这篇文章描述了这一切:
http://knol.google.com/k/fabio-maulo/nhibernate-chapter-11/1nr4enxv3dpeq/14#