2009-11-20 5 views
2

Si je mets dynamic-update = true, j'ai trouvé que les champs mis à jour dans mon Interceptor ne sont pas inclus dans l'instruction update qui va à la base de données. Lorsque je le mets à false, toutes les colonnes, y compris l'horodatage, sont mises à jour. Je veux vraiment utiliser la mise à jour dynamique. Je pensais que cette ligne aurait marqué ma dernière colonne modifiée comme sale.NHibernate dynamic-update ne parvient pas à mettre à jour les données modifiées dans l'intercepteur

auditEntity.LastModifiedTimestamp = now; 

Y at-il quelque chose que je dois faire dans mon intercepteur pour marquer le champ horodatage aussi sale?

Répondre

3

L'API-Doc dit: "renvoie vrai si l'utilisateur a modifié l'état actuel de quelque façon que ce soit."

Avez-vous essayé de renvoyer true au lieu d'appeler l'implémentation de base vide?

public class Interceptor : EmptyInterceptor 
{ 
    public override Boolean OnFlushDirty(object entity, object id, object[] state, 
    object[] previousState, string[] propertyNames, IType[] types) 
    { 
    var auditEntity = entity as BaseAuditEntity; 

    if (auditEntity != null) 
    { 
     var now = DateTime.Now; 
     var index = Array.IndexOf(propertyNames, "LastModifiedTimestamp"); 
     state[index] = now; 
     auditEntity.LastModifiedTimestamp = now; 

     return true; 
    } 
    return base.OnFlushDirty(entity, id, state, previousState, propertyNames, types); 
    } 

} 
+0

Cela a fonctionné. Merci! Je pensais que j'avais déjà essayé, mais j'ai essayé beaucoup de choses différentes ces derniers temps. – Jerry

Questions connexes