NHibernate 映射:具有多对一的用户类型
-
12-09-2019 - |
题
NHibernate 新手,正在学习它,因为我们正在修改现有解决方案以使用此 ORM。理想情况下,存储结构和对象类需要保持相同,因此我遇到了一两个映射问题。
一类“货币”具有价值和货币。该值是双精度值,货币是货币列表的外键。
货币可以在许多对象/表上显示为一种类型,因此我创建了一个 CompositeUserType 来将其与货币的标准映射一起映射。这工作得很好,但对于我来说,我无法从 NHibernate 获得与延迟加载的货币关系。我们使用 flutter,但很高兴看到 hbm 中的任何指示。
解决方案
看起来我需要使用组件,但看不到如何添加来自这些组件或 CompositeUserTypes 的引用:/
https://forum.hibernate.org/viewtopic.php?f=1&t=947719&start=0
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;
}
不确定这是否是推荐的做法,但它确实有效:)
不隶属于 StackOverflow