2009-07-09 117 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