代码之家  ›  专栏  ›  技术社区  ›  theGecko

NHibernate映射:多对一的用户类型

  •  2
  • theGecko  · 技术社区  · 17 年前

    理想情况下,存储结构和对象类需要保持不变,因此我遇到了一两个映射问题。

    一类“货币”具有价值和货币。该值为双精度,货币为货币列表的外键。

    货币可以作为一种类型出现在许多对象/表上,因此我创建了一个CompositeUserType来将其与货币的标准映射一起映射。 这很好,但就我个人而言,我无法从NHibernate获得与惰性负载的货币关系。我们使用fluent,但我很高兴在hbm中有任何提示。

    1 回复  |  直到 17 年前
        1
  •  4
  •   tinonetic    10 年前

    看起来我需要使用组件,但看不到如何添加来自这些或CompositeUserType的引用,不过:/

    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

    我通过使用CompositeUserType并在实体上设置代理端点来解决这个问题,该实体驱动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;
    }