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);
私の問題はエンティティの保存にあります。save メソッドを呼び出すと、OnPreInsert メソッドが呼び出されます。CommitTransaction() を呼び出すOnPreUpdateと、自動的に呼び出されます。
また、私Concurrencyは NHibernate で使用し、これを自動的OnPreUpdateに呼び出しVersionてデータベース内のプロパティの値にする2代わりに、これまでのところ問題はありませんが、このエンティティのバージョンの値がデータベースのバージョンの値1
であるため、このエンティティの次の更新で同時実行エラーが発生します。12
なぜOnPreUpdate呼ばれるのですか?