基本上我有一个简单的基类:
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可以在每次更新时调用静态方法(当然,此方法将返回当前登录的用户)。
提前致谢
答案 0 :(得分:0)
你可以在Nhibernate中挂钩events that fire before inserts and updates;您可以添加审核,自动填充某些字段等... This Ayende post(非常推荐)也涵盖了基础知识
我以这种方式管理了我的createdDate / modifiedDate / createdBy字段,并且还添加了审计,因此我可以允许在数据库中进行硬删除,同时保留有关已删除内容的信息