C# NHibernate中Auditor事件侦听器实现中的错误调用“OnPreUpdate”
我有一个使用NHibernate 3的项目。 我在NHibernate中使用了C# NHibernate中Auditor事件侦听器实现中的错误调用“OnPreUpdate”,c#,nhibernate,nhibernate-3,C#,Nhibernate,Nhibernate 3,我有一个使用NHibernate 3的项目。 我在NHibernate中使用了Auditor事件监听器,用于修剪实体中的字符串属性 我的代码是: public class AuditorEventListener : IPreInsertEventListener, IPreUpdateEventListener { public bool OnPreInsert(PreInsertEvent preInsertEvent) { Correction(preIns
Auditor事件监听器
,用于修剪实体中的字符串属性
我的代码是:
public class AuditorEventListener : IPreInsertEventListener, IPreUpdateEventListener
{
public bool OnPreInsert(PreInsertEvent preInsertEvent)
{
Correction(preInsertEvent.Entity);
return false;
}
public bool OnPreUpdate(PreUpdateEvent preUpdateEvent)
{
Correction(preUpdateEvent.Entity);
return false;
}
internal static void Correction(object entity)
{
var properties = entity.GetType().GetProperties().Where(p => p.PropertyType == typeof(String));
foreach (var item in properties)
{
var result = item.GetValue(entity, null).ToString();
result = result.Trim();
item.SetValue(entity, result, null);
}
}
}
NHibernate配置为:
<event type="pre-insert">
<listener class="NS.NHibernate.AuditorEventListener, NS.NHibernate" />
</event>
<event type="pre-update">
<listener class="NS.NHibernate.AuditorEventListener, NS.NHibernate" />
</event>
我的问题在于保存实体。
当我调用save方法时,会调用OnPreInsert方法。
当我调用CommitTransaction()时,会自动调用OnPreUpdate
我还在NHibernate中使用了Concurrency
,这会自动OnPreUpdate
调用数据库be2
中Version
属性的值,而不是1
到目前为止没有问题
但对于该实体的下一次更新,将发生并发错误,因为该实体中的版本值为1
,但数据库中的版本值为2
为什么要调用“
OnPreUpdate”
?我不知道它是否有用,但不管怎样,无论何时更新实体中的内容,都应该在preInsertEvent.State/preUpdateEvent.State中更新它。有关更多信息,请查看此帖子
希望这有帮助为什么要调用OnPreUpdate 看起来您的“session.FlushMode”设置为“FlushMode.Auto”或“FlushMode.Commit” 可以使用“FlushMode.Never”,但必须显式调用“session.Flush()
您是否看到了使用拦截器的机会,它看起来比EventListener更强大我的
FlushMode
设置处于Auto
模式,我需要使用此模式。我无法将其设置为从不
模式,因为我的项目逻辑不允许我这样做。
SessionInstance.Save(item);
SessionInstance.Update(item);