NHibernate +每次更新时属性的生成值(客户端)

时间:2011-07-18 15:20:42

标签: nhibernate nhibernate-mapping

基本上我有一个简单的基类:

public abstract class BasePoco {

    public virtual Guid Id { get; protected set; }
    public virtual DateTime Created { get; protected set; }
    public virtual DateTime LastModified { get; protected set; }
    public virtual User LastModifiedBy { get; set; }

}

使用以下映射:

<class name="BasePoco" abstract="true">
    <id name="Id">
      <generator class="guid.comb" />
    </id>
    <property name="Created" generated="insert" />
    <property name="LastModified" generated="always" />
    <many-to-one name="LastModifiedBy" />
</class>

Created属性是通过数据库默认值设置的,LastModified是通过数据库触发器设置的(尚未测试它,但我认为这样可行)。但是如何以一种干净的方式设置“LastModifiedBy”呢?我不想每次想要更新poco时都在我的代码中设置此属性,我希望NHibernate可以在每次更新时调用静态方法(当然,此方法将返回当前登录的用户)。

提前致谢

1 个答案:

答案 0 :(得分:0)

你可以在Nhibernate中挂钩events that fire before inserts and updates;您可以添加审核,自动填充某些字段等... This Ayende post(非常推荐)也涵盖了基础知识

我以这种方式管理了我的createdDate / modifiedDate / createdBy字段,并且还添加了审计,因此我可以允许在数据库中进行硬删除,同时保留有关已删除内容的信息