2009-07-09 133 views
2

NHibernate的新手和學習它,因爲我們正在修改現有的解決方案來使用此ORM。理想情況下,存儲結構和對象類需要保持不變,所以我遇到了一個或兩個映射問題。NHibernate映射:UserTypes與多對一

一類「錢」有價值和貨幣。該值是雙倍值,貨幣是貨幣列表表的外鍵。

錢可以作爲許多對象/表的類型出現,因此我創建了一個CompositeUserType以將其映射到貨幣的標準映射。 這工作正常,但對於我的生活,我無法從NHibernate的延遲加載貨幣關係。我們使用流利的,但很高興在HBM的任何指針。

回答

4

看起來我需要使用的組件,看不出如何從那些或CompositeUserTypes添加引用,但:/

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

UPDATE

我已經找到了這個問題通過使用CompositeUserType和設置代理端點上diring的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; 
} 

不知道這是做它的推薦的方式,但它的工作原理:)

+0

剛想提 - 不要添加2個答案。對一個人來說就足夠了 - 如果發現任何新東西,就編輯它。 :) – 2009-07-10 09:18:51