2009-03-24 22 views
9

No tengo acceso al código aquí en frente de mí, así que me preguntaba si alguien podría ayudarme con Session.Evict().NHibernate Session.Evict()

Supongamos que tengo un objeto Persona con una colección secundaria de Direcciones. Relleno el objeto Persona de una sesión y cargo la colección de Direcciones. Luego llamo a Session.Evict (personObject) para separar el objeto Person de la sesión. Mi pregunta es, si intento acceder a la colección Addresses, ¿devolverá null o recibiré una excepción porque el proxy de NHibernate no puede encontrar la sesión asociada?

Respuesta

18

Si causa que la carga lenta suceda antes de desalojar a la entidad, la colección estará accesible incluso después del desalojo. Sin embargo, si desaloja a la entidad y luego intenta cargar la colección infantil de forma perezosa, obtendrá una excepción.

+0

+1 Encontré exactamente el mismo escenario hoy mientras hacía las pruebas unitarias –

0

Tampoco tengo el código en frente mío, pero de memoria, es probable que obtenga una excepción.

Si tiene una carga lenta y funciona, NHibernate intentará cargar la colección de direcciones. Nunca debe devolver un valor/colección incorrectos, solo se quejará cuando no pueda cargar lo que se le ha pedido.

+0

esto tiene sentido ... cuando tenga la oportunidad lo probaré. Gracias por la respuesta – lomaxx

6

Recibirá una NHibernate.LazyInitializationException.