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
であるため、このエンティティの次の更新で同時実行エラーが発生します。1
2
なぜOnPreUpdate
呼ばれるのですか?