NHibernate:有条件地加载计算列

时间:2010-07-23 02:27:15

标签: nhibernate subquery calculated-columns

我有以下的箴言

<property name="Allocated" type="decimal" formula="(select sum(a.AllocationAmount) from  Allocation a where  a.TransactionId = TransactionId)" />

这会加载已分配给运作良好的发票的交易金额。

但是,大多数情况下我并不关心这个数额。有没有办法有条件地加载这个计算列?或者有没有办法将此计算列添加到HQL / Critera中,以便我可以将其作为我运行的某些特定查询的一部分?

2 个答案:

答案 0 :(得分:4)

在NH 3.0中,您可以定义延迟属性,这些属性与听起来完全一样(参见http://ayende.com/Blog/archive/2010/01/27/nhibernate-new-feature-lazy-properties.aspx

然而,这看起来更适合于查询或者可能是充当视图的伪实体。

答案 1 :(得分:2)

如果在属性映射上指定access="none",则可以将属性保留在对象模型之外,但仍然使用hql查询它。有关详细信息,请参阅this article

此外,您可以将该逻辑分解为函数,使用自定义方言注册,然后使用条件api(通过Projections.SqlFunction)查询/项目