2010-12-08 3 views
4

Nous avons l'écouteur d'événement PreUpdate suivant:écouteur d'événement NHibernate PreUpdate pas persistant change

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; 
     } 

points d'arrêt sur instruction de retour indiquent que les anciennes/nouvelles valeurs d'état et les propriétés des entités ont été mises à jour aux valeurs attendues. Toutefois, le profileur Sql en cours d'exécution indique que les valeurs ModifiedDate/ModifiedBy ne sont pas mises à jour.

Si je mets à jour le code de persistance et que vous définissez ModifiedDate manuellement, Profiler affiche ModifiedDate en cours de mise à jour.

Le fichier de mappage pour la majorité de nos entités est:

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

Toute pensée quant à ce qui pourrait prévenir les valeurs définies par l'écouteur d'événement d'être à la base de données propagé?

Répondre

4

Avez-vous une mise à jour dynamique dans vos mappages de table? Il y a un "bug" dans NHibernate qui empêche PreUpdate et PreInsert de travailler avec dynamic-update. Voir http://www.mail-archive.com/[email protected]/msg13624.html

+1

Excellent Jamie. Merci. Retour à l'ancien intercepteur ... – 6footunder

+0

Voir aussi ces questions: http://stackoverflow.com/questions/5087888/ipreupdateeventlistener-and-dynamic-update-true et http://stackoverflow.com/questions/857234/audit- journalisation-nhibernate –

Questions connexes