作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将 NHibernate 与现有数据库一起使用。在数据模型中,每个表中都有包含上次更新行的时间和用户名的列。我如何使用 NHibernate 做到这一点?
我试图实现一个拦截器,在使用 IInterceptor.OnSave 方法保存实体之前,它在实体中设置 ChangeTime 和 ChangeUser。这不起作用,因为即使没有修改其他属性,设置这些属性也会触发对行的更新。
如果有任何方法可以告诉 NHibernate 排除 ChangeTime 和 ChangeUser 属性,那么它可能会起作用,然后它会进行脏检查。但我还没有找到任何方法来实现这一点。
谢谢你的帮助。
最佳答案
您应该为预插入和预更新事件注册一个监听器。你可以通过你的配置来做到这一点:
<hibernate-configuration>
...
<event type="pre-update">
<listener class="MyListener, MyAssembly"/>
</event>
<event type="pre-insert">
<listener class="MyListener, MyAssembly"/>
</event>
</hibernate-configuration>
public class MyListener : IPreUpdateEventListener, IPreInsertEventListener
{
public bool OnPreUpdate(PreUpdateEvent evt)
{
if (evt.Entity is IHasLastModified)
UpdateLastModified(evt.State, evt.Persister.PropertyNames);
return false;
}
public bool OnPreInsert(PreInsertEvent evt)
{
if (evt.Entity is IHasLastModified)
UpdateLastModified(evt.State, evt.Persister.PropertyNames);
return false;
}
void UpdateLastModified(object[] state, string[] names)
{
var index = Array.FindIndex(names, n => n == "LastModified");
state[index] = DateTime.Now;
}
}
关于nhibernate - 如何使用 NHibernate 实现 ChangeTime 和 ChangeUser 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/551701/
我正在尝试将 NHibernate 与现有数据库一起使用。在数据模型中,每个表中都有包含上次更新行的时间和用户名的列。我如何使用 NHibernate 做到这一点? 我试图实现一个拦截器,在使用 II
我是一名优秀的程序员,十分优秀!