2009-05-12 10 views
7

Penso che questa sia una domanda facile, ma il mio googlare su Google è debole.NHibernate: significato di intercettazione valore di ritorno

Ho avuto il problema descritto nel seguente collegamento per quanto riguarda un ID generato e cascata:

https://www.hibernate.org/hib_docs/nhibernate/html/example-parentchild.html (verso il basso)

ho riparato usando il loro metodo suggerito di un intercettatore. Tutto sembra funzionare, quindi sono felice.

Detto questo, non ho idea di che cosa il significato del valore di ritorno è da metodi quali:

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

In entrambi i casi viene restituito false.

Quando google su NHibernate Interceptors vedo un sacco di esempi su come scriverne uno. Alcuni invece restituiscono true (http://www.lostechies.com/blogs/rhouston/archive/2008/03/27/creating-a-timestamp-interceptor-in-nhibernate.aspx). Non ho idea di quale sia la differenza qui. Il mio codice funziona, ma gli Interceptor mi sembrano utili, quindi mi piacerebbe avere una comprensione migliore.

+1

btw, l'intercettatore viene interrotto e sostituito con il sistema di eventi. Sfortunatamente, il sistema degli eventi è ancora meno documentato. Ma dovresti comunque trovare qualche documentazione utile. –

risposta

5

Credo che il valore restituito dovrebbe indicare se il parametro di stato è stato modificato nel metodo dell'intercettore. Hai ragione - è difficile per Google al momento - il sito di NHibernate è stato spostato di recente e Google non sembra trovare tutte le informazioni utili come prima.

+0

Quindi, è corretto dire che si restituisce true se si è modificato lo stato e falso se non lo si è fatto? –

0

Huey,

leggere questo post, io non sono un programmatore .net, ma questo post è molto utile:

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

Capitolo 11. intercettori ed eventi Si è spesso utile per l'applicazione a reagire a determinati eventi che si verificano all'interno di NHibernate. Ciò consente l'implementazione di di determinati tipi di funzionalità generica e l'estensione della funzionalità di NHibernate.

11.1. Interceptor L'interfaccia IInterceptor fornisce le chiamate dalla sessione all'applicazione che consente a l'applicazione di controllare e/o manipolare le proprietà di un oggetto persistente prima di essere salvato, aggiornato, eliminato o caricato. È possibile utilizzare per tenere traccia delle informazioni di controllo . Ad esempio, il seguente IInterceptor automaticamente imposta la createTimestamp quando viene creato un IAuditable e aggiorna la proprietà lastUpdateTimestamp quando un IAuditable viene aggiornato.

Spero che ti illumini un po 'di più.

+1

Ho già letto questo in precedenza, ma forse ho bisogno di leggere di più tra le righe. Nell'esempio che forniscono, sembra che restituisca true se modifica l'entità e false se non lo fa. Forse è tutto lì.Immagino che avrei dovuto guardare più da vicino al codice e non aspettarmi che l'istruzione "restituisca valore significa (vuoto)". – anonymous

+0

- questo è un vecchio post ma nel caso qualcuno lo trovi utile - ho dovuto modificare il valore di ritorno nell'intercettatore per restituire True se IsSaved è falso, che poi istruirà NH a salvare l'istanza come nuova (con insert). – TheMar