NHibernate computed column

本文关键字:column computed NHibernate | 更新日期: 2023-09-27 17:49:13

我有一个实体("A"),我通过NHibernate持久化。这个实体可能在数据库中有几个类型("B")的子实体,当我检索实体A时,我希望有一个属性来指示属于A的实体B的计数。我不想在这里使用集合,因为我不必检索所有B实体来计数它们。

Psuedo SQL做我想做的事情可能看起来像:

select a.*, count(b.*) from a left join b on b.aid = a.id

这是可能的NHibernate,特别是LINQ提供程序吗?

NHibernate computed column

如果您在集合中指定lazy="extra",当您访问集合上的count属性时,nhibernate将只获取子节点的计数,而不是所有子节点的计数。

见这里(第二标题):http://blog.idm.fr/2010/02/improving-performance-with-nhibernate.html

你能把你的nHibernate绑定到一个视图吗?

CREATE VIEW A_augmented
AS
SELECT A.*
       ,(SELECT COUNT(*) FROM B WHERE B.aid = a.id) AS ChildCount
FROM A

(我知道这个SQL是相对幼稚的,但它是一种简单的方式来表达它在有效的SQL)

可以使用Formula将属性映射到SQL表达式。在Ayendes网站上就有这样一个例子。使用起来很好,但可能有你需要注意的副作用。计算列当然不是最新的。加载实体时为快照。

你也可以使用HQL用一个简单的语法来获取大小:

select a, size(a.Children)
from a

当然,这也返回一个快照,但是您的业务逻辑知道这一点,因此它不是一个副作用。