gpt4 book ai didi

nhibernate - IPreUpdateEventListener 和动态更新 ="true"

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

我一直在尝试按照 Ayende's blog 做一个非常简单的审计场景。当涉及到 IPreUpdateEventListener 和 IPreInsertEventListener 时,这似乎是每个人都引用的资源。

然而,无论我多么努力,我都无法让它发挥作用。该事件正确触发,当我通过它时一切看起来都不错,但没有向数据库发出我的“更改时间”的更新。

我在谷歌上搜索了大约一天,终于找到了答案 here .

当您将实体映射为 dynamic-update="true"时,它就不起作用了。果然,我就是这种情况。既然我很难找到这条信息,那么使用dynamic-update="true"是不是很少见?我们在所有实体上使用它。

由于这对我们来说是道路上的一个重大障碍,我想问一下是否有任何解决办法?

我一直在看 IInterceptor 但它总是被称为过时的,那么它的缺点是什么?此外,我还没有找到关于如何使用 IInterceptor 归档相同审计(带有插入/更新时间戳)的非常好的教程(我对 NHibernate 相当陌生)。

任何帮助,将不胜感激!

最佳答案

我遇到了这个确切的问题。这是我修复它的方式:

public class MyFlushEntityEventListener : DefaultFlushEntityEventListener
{
protected override void DirtyCheck(FlushEntityEvent e)
{
base.DirtyCheck(e);
if (e.DirtyProperties != null &&
e.DirtyProperties.Any() &&
//ITrackUpdate is my inteface for audited entities
e.Entity is ITrackUpdate)
e.DirtyProperties = e.DirtyProperties
.Concat(GetAdditionalDirtyProperties(e)).ToArray();
}

static IEnumerable<int> GetAdditionalDirtyProperties(FlushEntityEvent @event)
{
yield return Array.IndexOf(@event.EntityEntry.Persister.PropertyNames,
"UpdateTime");
yield return Array.IndexOf(@event.EntityEntry.Persister.PropertyNames,
"UpdateUser");
//You can add any additional properties here.
//Some of my entities do not track the user, for example.
}
}

然后,只需替换 NH 配置文件中的事件监听器:
<listener type="flush-entity"
class="MyFlushEntityEventListener, MyAssembly"/>

关于nhibernate - IPreUpdateEventListener 和动态更新 ="true",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5087888/

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