tutorial net mvc example ejemplo asp nhibernate nhibernate-mapping

mvc - nhibernate vb net example



NHibernate: cómo habilitar la carga diferida en el mapeo de uno a uno (4)

Las relaciones uno-a-uno dentro de nhibernate pueden ser cargadas como "falso" o "proxy". Me preguntaba si alguien sabe cómo hacer un mapeo perezoso de uno a uno.

Trabajé en un hack para lograr el mismo resultado utilizando un conjunto vago mapeado en un campo privado y haciendo que la propiedad pública devolviera el primer resultado de ese conjunto. Funciona, pero no es el código más limpio ...

¡Gracias por adelantado!


Por lo que yo sé, no hay una forma no hacky de cargar perezosamente uno a uno. Espero estar equivocado, pero la última vez que lo revisé fue el caso.


Hay una manera de pensar. Se describe aquí en detalles:

<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHibernateTest" namespace="NHibernateTest"> <class name="Person" > <id name="PersonID" type="Int32"> <generator class="identity" /> </id> <property name="LastName" type="String" length="50" /> <property name="FirstName" type="String" length="50" /> <many-to-one name="Photo" class="PersonPhoto" /> </class> <class name="PersonPhoto"> <id name="PersonID" type="Int32"> <generator class="foreign"> <param name="property">Owner</param> </generator> </id> <property name="Photo" type="BinaryBlob" /> <one-to-one name="Owner" class="Person" constrained="true" /> </class> </hibernate-mapping>


Probé el ejemplo utilizado por Artem Tikhomirov arriba. Seguí recibiendo un error de que la columna de Foto no existe. Después de mirar esto , descubrí que el mapeo había desaparecido un poco. Cuando cambié la asignación de varios a uno para especificar el nombre de columna de esta manera:

many-to-one name = "Photo" column = "PersonID" class = "PersonPhoto" unique = "true"

Yo tengo que trabajar. Espero que esto ayude a alguien: o)


La carga lenta de uno a uno no es compatible a menos que la asociación sea obligatoria. Vea aquí el razonamiento.

Todo se reduce al hecho de que para decidir si existe el otro lado de la relación (N) Hibernate tiene que ir a la base de datos. Como ya ha tomado la base de datos, también puede cargar el objeto completo.

Si bien hay casos en los que golpear el DB solo para ver si el objeto relacionado existe sin realmente cargar el objeto tiene sentido (si el objeto relacionado es muy "pesado"), NHibernate no lo admite actualmente.