Domanda

Nuovo per NHibernate e imparare come stiamo modificando una soluzione esistente per utilizzare questo ORM. Idealmente, le classi struttura di archiviazione e oggetti devono rimanere lo stesso, in modo da Ive venire attraverso uno o due problemi di mappatura.

Una classe 'Money' ha un valore e la valuta. Il valore è un doppio e la moneta è una chiave esterna a una tabella elenco di valute.

Il denaro può apparire come un tipo su molti oggetti / tabelle, in modo da Ive ha creato un CompositeUserType per mappare in concomitanza con una mappatura standard di valuta. Questo funziona bene, ma per la vita di me non riesco a ottenere il rapporto di valuta a carico pigro da NHibernate. Noi usiamo correntemente, ma sono felice per tutti gli indicatori di HBM.

È stato utile?

Soluzione

Sembra che ho bisogno di usare i componenti, non può vedere come aggiungere i riferimenti da quelli o CompositeUserTypes, però: /

https://forum.hibernate.org/viewtopic.php ? f = 1 & t = 947.719 & 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

Aggiorna

Ho saggiato questo problema utilizzando un CompositeUserType e la creazione l'endpoint proxy sull'entità diring il metodo 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;
}

Non sono sicuro se questo è il modo consigliato di farlo, ma funziona:)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top