gpt4 book ai didi

nhibernate - 如何使用 NHibernate 实现 ChangeTime 和 ChangeUser 列?

转载 作者:行者123 更新时间:2023-12-03 12:31:41 25 4
gpt4 key购买 nike

我正在尝试将 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;
}
}

并对 pre update 事件做同样的事情。

编辑:这个负责插入和更新,它似乎工作。

关于nhibernate - 如何使用 NHibernate 实现 ChangeTime 和 ChangeUser 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/551701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com