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

NHibernate:有条件地加载计算列

  •  3
  • Alistair  · 技术社区  · 16 年前

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

    这将加载已分配给工作正常的发票的事务量。

    不过,大多数情况下我都不在乎这个数额。有没有办法有条件地加载这个计算列?或者有没有办法将这个计算列添加到HQL/Critera中,这样我就可以将它作为我运行的某些特定查询的一部分?

    2 回复  |  直到 16 年前
        1
  •  4
  •   Diego Mijelshon    16 年前

    在nh3.0中,您可以定义lazy属性,这些属性的工作方式与它们的声音完全相同(请参见 http://ayende.com/Blog/archive/2010/01/27/nhibernate-new-feature-lazy-properties.aspx )

        2
  •  2
  •   DanP    16 年前

    如果您指定 access="none" 在属性映射上,您可以将属性一起排除在对象模型之外,但仍然可以使用hql对其进行查询。看到了吗 this article 更多信息。

    此外,您还可以将该逻辑分解为一个函数,用自定义方言注册它,然后使用criteriaapi(通过 Projections.SqlFunction