2010-12-08 15 views
4

を変更:return文にNHibernateは更新前のイベントリスナー永続ではない私たちは、次の更新前イベントリスナー持っ

public bool OnPreUpdate(PreUpdateEvent @event) 
     { 
      BaseBO entity = @event.Entity as BaseBO; 
      if (entity == null) 
       return false; 

      var operatorName = "OpName"; 
      var utcDateTime = DateTime.Now.ToUniversalTime(); 

      Set(@event.Persister, @event.State, "ModifiedBy", "Fred & Barney"); 
      Set(@event.Persister, @event.State, "ModifiedDate", utcDateTime); 

      entity.ModifiedBy = "fred & barney"; 
      entity.ModifiedDate = utcDateTime; 

      return false; 
     } 

private void Set(IEntityPersister persister, object[] state, string propertyName, object value) 
     { 
      var index = Array.IndexOf(persister.PropertyNames, propertyName); 
      if (index == -1) 
       return; 
      state[index] = value; 
     } 

ブレークポイントを新しい/古い状態値とエンティティプロパティは、期待値に更新されていることを示しています。

しかし、SQLプロファイラを実行すると、ModifiedDate/ModifiedByの値は更新されません。

永続性コードを更新し、ModifiedDateを手動で設定すると、ProfilerはModifiedDateが更新されていることを示します。

当社の事業体の大多数のためのマッピングファイルは次のとおりです。

<property name="ModifiedDate" insert="false" /> 

データベースにpropogatedされてからイベントリスナによって設定された値を防止することができるものについての任意の考え?

答えて

4

テーブルマッピングに動的更新がありますか? PreUpdateとPreInsertが動的更新を扱うことを妨げるNHibernateの「バグ」があります。 http://www.mail-archive.com/[email protected]/msg13624.html

+1

Excellent Jamieを参照してください。ありがとう。古いインターセプタに戻る... – 6footunder

+0

これらの質問も参照してください:http://stackoverflow.com/questions/5087888/ipreupdateeventlistener-and-dynamic-update-true and http://stackoverflow.com/questions/857234/audit-ロギング - nhibernate –

関連する問題