I have a project by using NHibernate 3.
I used Auditor Event Listener
in NHibernate for Trim of string properties in my entities.
My code is :
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 config is :
<event type="pre-insert">
<listener class="NS.NHibernate.AuditorEventListener, NS.NHibernate" />
</event>
<event type="pre-update">
<listener class="NS.NHibernate.AuditorEventListener, NS.NHibernate" />
</event>
I used below commands for save and update for entities:
SessionInstance.Save(item);
SessionInstance.Update(item);
My problem is in save entity.
When I call save method, OnPreInsert
method is called.
When I call CommitTransaction() OnPreUpdate
is called Automatically.
Also I used Concurrency
in NHibernate and this Automatically OnPreUpdate
call caused to value of Version
property in database be 2
instead of 1
So far no problem
but for next update of this entity concurrency error would happen because value of version in this entity is 1
but value of version in database is 2
.
Why is OnPreUpdate
called?