2009-05-12 8 views
7

Je pense que c'est une question facile, mais mon googling est faible sur ce point.NHibernate: Signification des intercepteurs valeur de retour

I avait le problème décrit dans le lien suivant par rapport à un identifiant généré et en cascade:

https://www.hibernate.org/hib_docs/nhibernate/html/example-parentchild.html (vers le bas)

je fixe à l'aide de leur méthode suggérée d'un intercepteur. Tout semble fonctionner, alors je suis heureux.

Cela dit, je ne sais pas quelle est la signification de la valeur de retour est de méthodes telles que:

public override bool OnLoad(object entity, object id, object[] state, string[] propertyNames, IType[] types) 
    { 
     if (entity is Persistent) ((Persistent)entity).OnLoad(); 
     return false; 
    } 

    public override bool OnSave(object entity, object id, object[] state, string[] propertyNames, IType[] types) 
    { 
     if (entity is Persistent) ((Persistent)entity).OnSave(); 
     return false; 
    } 

Dans les deux cas de faux est retourné.

Lorsque je parle de NHibernate Interceptors, je vois de nombreux exemples d'écriture. Certains reviennent à la place vrai (http://www.lostechies.com/blogs/rhouston/archive/2008/03/27/creating-a-timestamp-interceptor-in-nhibernate.aspx). Je n'ai aucune idée de la différence ici. Mon code fonctionne, mais les intercepteurs me semblent utiles, alors j'aimerais mieux comprendre.

+1

btw, l'intercepteur est interrompu et remplace par le système d'événements. Malheureusement, le système d'événements est encore moins documenté. Mais vous devriez toujours trouver de la documentation utile. –

Répondre

5

Je crois que la valeur de retour devrait indiquer si le paramètre d'état a été modifié dans la méthode d'intercepteur. Vous avez raison - il est difficile de google en ce moment - le site NHibernate a été déplacé récemment et google ne semble pas trouver autant d'informations utiles que par le passé.

+0

Alors, est-il juste de dire que vous retournez vrai si vous avez changé l'état, et faux si vous ne l'avez pas fait? –

0

Huey,

Lire la suite, je ne suis pas un programmeur .net, mais ce poste est très utile:

http://knol.google.com/k/fabio-maulo/nhibernate-chapter-11/1nr4enxv3dpeq/14#

Chapitre 11. Les intercepteurs et les événements Il est souvent utile pour l'application à réagir à certains événements qui se produisent à l'intérieur de NHibernate. Cela permet la mise en œuvre de certains types de fonctionnalité générique , et l'extension de la fonctionnalité NHibernate.

11.1. Intercepteurs L'interface IInterceptor fournit des rappels de la session à l'application permettant l'application à inspecter et/ou manipuler les propriétés d'un objet persistant avant qu'il ne soit sauvegardé, mis à jour, supprimé ou chargé. Pour cela, il est possible de suivre les informations d'audit . Par exemple, le suivant IInterceptor automatiquement définit le createTimestamp lorsqu'un IAuditable est créé et met à jour la propriété lastUpdateTimestamp lorsqu'un IAuditable est mis à jour.

Espérons qu'il vous éclaire un peu plus.

+1

J'ai effectivement lu ceci avant mais peut-être que j'ai besoin de lire plus entre les lignes. Dans l'exemple qu'ils fournissent, il semble que cela renvoie true s'il modifie l'entité et false si ce n'est pas le cas. Peut-être que c'est tout ce qu'il y a à faire.J'imagine que j'aurais dû regarder de plus près le code et ne pas m'attendre à une instruction 'return return means (blank)'. – anonymous

+0

- ceci est un ancien message mais juste au cas où quelqu'un le trouverait utile - j'ai dû modifier la valeur de retour dans l'intercepteur pour renvoyer True si IsSaved est false, qui demandera alors à NH d'enregistrer l'instance comme nouvelle (avec insert). – TheMar

Questions connexes