NHibernate映射: UserTypes with many-to-one

标签 nhibernate fluent-nhibernate usertype compositeusertype

NHibernate 的新手,在我们修改现有解决方案以使用此 ORM 时学习它。 理想情况下,存储结构和对象类需要保持相同,因此我遇到了一两个映射问题。

一类“金钱”具有值(value)和货币。该值是 double 值,货币是货币列表的外键。

金钱可以在许多对象/表上显示为一种类型,因此我创建了一个 CompositeUserType 来将其与货币的标准映射一起映射。 这工作得很好,但对于我来说,我无法从 NHibernate 获得与延迟加载的货币关系。我们使用 Fluent,但对 hbm 中的任何指针感到高兴。

最佳答案

看起来我需要使用组件,但看不到如何添加来自这些组件或 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

更新

我通过使用 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;
}

不确定这是否是推荐的做法,但它确实有效:)

关于NHibernate映射: UserTypes with many-to-one,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1102233/

相关文章:

c# - Nhibernate - 获取异常执行 SQL 查询

c# - NHibernate LINQWhere 和 Any 抛出异常

c# - 如何使用 FluentNHibernate 映射具有复杂键类型 (CultureInfo) 的字典

c# - 使用 nhibernate 时,如何确定映射代码中的最佳批量大小?

fluent-nhibernate - 具有 Fluent Nhibernate 的存储库模式

java - Hibernate + 使用泛型的自定义用户类型

nhibernate - ORM 的 SQL 注入(inject)漏洞在哪里?

如果之前违反了唯一约束,NHibernate 将停止

fluent-nhibernate - 如何在 Fluent NHibernate 中映射 IDictionary<string, object>?

NHibernate CompositeUserType : How to specify Sql Types?