Pregunta

Nuevo en NHibernate y aprender como estamos modificando una solución existente para utilizar este ORM. Idealmente, la estructura de almacenamiento de objetos y clases necesitan permanecer el mismo, por lo que he encontrado uno o dos problemas de asignación.

Una clase 'Money' tiene un valor y la moneda. El valor es un doble y la moneda es una clave externa a una tabla de lista de monedas.

El dinero puede aparecer como un tipo de muchos objetos / tablas, por lo que he creado un CompositeUserType hacer un mapa junto con una asignación estándar a la moneda. Esto funciona bien, pero para la vida de mí no puede obtener la relación de la moneda a la carga perezosa de NHibernate. Utilizamos fluido, pero estoy feliz por cualquier punteros en HBM.

¿Fue útil?

Solución

Parece que necesito utilizar componentes, no puede ver cómo añadir referencias de aquellos o CompositeUserTypes, sin embargo: /

https://forum.hibernate.org/viewtopic.php ? f = 1 & t = 947719 & start = 0

https://web.archive.org/web/20090227235136/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008 /08/13/a-fluent-interface-to-nhibernate---part-2---value.aspx

http://wiki.fluentnhibernate.org/show/StandardMappingComponents

Actualizar

He conseguido alrededor de este problema utilizando un CompositeUserType y configurar el punto final proxy en la entidad diring el método nullSafeGet ():

public virtual object NullSafeGet(IDataReader dr, string[] names, ISessionImplementor session, object owner)
{
    if (dr == null)
    {
        return null;
    }

    Money value = new Money()
    {
        Value = (double)NHibernateUtil.Double.NullSafeGet(dr, names[0], session, owner)
    };

    string entityName = session.BestGuessEntityName(value.Currency);
    value.Currency = (CurrencyDetails)session.InternalLoad(entityName, (object)DEFAULT_CURRENCY_ID, false, false);

    return value;
}

No estoy seguro si esta es la forma recomendada de hacerlo, pero funciona:)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top