我有一个使用 NHibernate 3 的项目。我Auditor Event Listener
在 NHibernate 中用于修剪我的实体中的字符串属性。
我的代码是:
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>
我使用以下命令来保存和更新实体:
SessionInstance.Save(item);
SessionInstance.Update(item);
我的问题在于保存实体。当我调用保存方法时,OnPreInsert
方法被调用。当我调用 CommitTransaction() 时OnPreUpdate
会自动调用。
另外我Concurrency
在 NHibernate 中使用了这个自动OnPreUpdate
调用导致Version
数据库中的属性值2
不是1
到目前为止没有问题但是对于这个实体的下一次更新会发生并发错误,因为这个实体中1
的版本值是但数据库中的版本值是2
。
为什么OnPreUpdate
叫?