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é?
Excellent Jamie. Merci. Retour à l'ancien intercepteur ... – 6footunder
Voir aussi ces questions: http://stackoverflow.com/questions/5087888/ipreupdateeventlistener-and-dynamic-update-true et http://stackoverflow.com/questions/857234/audit- journalisation-nhibernate –