2009-05-12 8 views
7

Creo que esta es una pregunta fácil, pero mi Google es débil en esto.NHibernate: Significado de los interceptores return value

I tenían el problema descrito en el siguiente enlace en relación con un ID generado y en cascada:

https://www.hibernate.org/hib_docs/nhibernate/html/example-parentchild.html (hacia la parte inferior)

me fijo utilizando su método sugerido de un interceptor. Todo parece estar funcionando, entonces estoy feliz.

Dicho esto, no tengo ni idea de cuál es el significado del valor de retorno es de métodos tales como:

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

En ambos casos se devuelve false.

Cuando busco en NHibernate Interceptors, veo muchos ejemplos de cómo escribir uno. Algunos en cambio devuelven verdadero (http://www.lostechies.com/blogs/rhouston/archive/2008/03/27/creating-a-timestamp-interceptor-in-nhibernate.aspx). No tengo idea de cuál es la diferencia aquí. Mi código funciona, pero los Interceptores me parecen útiles, así que me gustaría tener una mejor comprensión.

+1

Por cierto, el interceptor se interrumpe y se reemplaza con el sistema de eventos. Desafortunadamente, el sistema de eventos está aún menos documentado. Pero aún debes encontrar alguna documentación útil. –

Respuesta

5

Creo que el valor de retorno debería indicar si el parámetro de estado se ha cambiado en el método del interceptor. Tienes razón, es difícil googlear en este momento, el sitio NHibernate se movió recientemente y Google parece no encontrar tanta información útil como solía hacerlo.

+0

Entonces, ¿es justo decir que devuelve cierto si cambió el estado y falso si no lo hizo? –

0

Huey,

leer este post, no soy un programador .NET, este artículo es muy útil:

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

Capítulo 11. Interceptores y eventos Se es a menudo es útil para la aplicación a reaccionar a ciertos eventos que ocurren dentro de NHibernate. Esto permite la implementación de ciertos tipos de funcionalidad genérica y la extensión de la funcionalidad NHibernate.

11.1. Interceptores La interfaz IInterceptor proporciona devoluciones de llamada desde la sesión a la aplicación que permite la aplicación para inspeccionar y/o manipular las propiedades de un objeto persistente antes de guardarse, actualizarse, eliminar o cargar. Un posible uso para esto es rastrear la información de auditoría . Por ejemplo, el siguiente IInterceptor establece establece createTimestamp cuando se crea un IAuditable y actualiza la propiedad lastUpdateTimestamp cuando se actualiza un IAuditable.

Espero que te ilumine un poco más.

+1

En realidad, he leído esto antes, pero tal vez necesito leer más entre líneas. En el ejemplo que proporcionan, parece que devuelve verdadero si modifica la entidad y falso si no lo hace. Tal vez eso es todo lo que hay que hacer.Creo que debería haber mirado más de cerca el código y no esperar una instrucción 'el valor de retorno significa (en blanco)'. – anonymous

+0

- esta es una publicación anterior pero por si a alguien le resulta útil - tuve que modificar el valor de retorno en el interceptor para devolver True si IsSaved es falso, lo que le indicará a NH que guarde la instancia como nueva (con inserción). – TheMar

Cuestiones relacionadas