2008-10-15 11 views
6

Sigo obteniendo una NHibernate.PersistentObjectException al llamar a session.Save() que se debe a un proxy no inicializado pasado a save(). Si jugueteo con mi configuración de cascada, puedo hacer que desaparezca, pero los objetos secundarios no se guardan.NHibernate: proxy no inicializado pasado a save() y en cascada

La única otra solución que he encontrado es agregando lo siguiente a DefaultSaveEventListener.

protected override bool ReassociateIfUninitializedProxy(object obj, global::NHibernate.Engine.ISessionImplementor source) 
    { 
     if (!NHibernateUtil.IsInitialized(obj)) 
      NHibernateUtil.Initialize(obj); 

     return base.ReassociateIfUninitializedProxy(obj, source); 
    } 

Esto obviamente no es una solución ideal.

¿Alguna idea?

+0

¿Alguna vez encontró una mejor solución para esto? Por el momento, tengo que usar el enfoque que has mencionado que anula el ReassociateIfUninitializedProxy. –

+0

No he encontrado una solución aún ... – jonnii

+0

¿Ve este problema con todos los objetos o con un objeto en particular? si es un objeto en particular, ¿puede actualizar la pregunta con su modelo y mapeo? – Baz1nga

Respuesta

2

¿Está tratando de trabajar con un objeto secundario que está en una lista en una entidad de agregado raíz? Si es así, debe trabajar con la raíz, atravesar al niño, realizar los cambios y guardar la raíz , no el elemento secundario.

+0

Ya no trabajo en ese proyecto, pero creo que esa sería probablemente la causa. – jonnii

2

Tuve un problema similar.

La solución fue simple: use ISession.Get() y no ISession.Load()

+0

¡levantarse, resucitar de entre los muertos! – Jaguar

+0

Recibo este error y no tengo referencias a ISession.Load ni a ninguna de sus sobrecargas. – Rabid

4

Hay mera presencia de una costumbre DefaultSaveEventListener subclase contiene ninguna conducta alterada temporalmente o extendida es suficiente para desencadenar esta excepción para mí, usando el siguiente código XML de configuración:

<event type="save-update"> 
    <listener class="MyNamespace.MyCustomSaveEventListener, MyAssembly" /> 
</event> 

Continuo esta discusión in this question.

Actualización:

que había obtenido por error de DefaultSaveEventListener en lugar de DefaultSaveOrUpdateEventListener, el cambio de la superclase hizo que este problema desaparezca para mí.

+2

Ahh estúpido, yo estaba derivando de 'DefaultSaveEventListener' en lugar de' DefaultSaveOrUpdateEventListener', cambiando la superclase hizo que este problema desapareciera. – Rabid

+0

+1 - Esta fue la causa, y la solución, de mi error. Le sugiero que cambie su comentario a su respuesta, ya que es útil y una razón precisa por la que alguien podría obtener este error. –

Cuestiones relacionadas