我有一个实体(“A”),我坚持通过NHibernate。这个实体在数据库中可能有几个类型为“B”的孩子,当我检索实体A时,我希望有一个属性指示属于A的实体B的计数。我不想使用这里收集,因为我不必检索所有B实体只是为了计算它们。NHibernate计算列
的伪SQL做什么,我想可能是这样的:
select a.*, count(b.*) from a left join b on b.aid = a.id
这可能与NHibernate的,并且比较特别的LINQ提供程序?
我有一个实体(“A”),我坚持通过NHibernate。这个实体在数据库中可能有几个类型为“B”的孩子,当我检索实体A时,我希望有一个属性指示属于A的实体B的计数。我不想使用这里收集,因为我不必检索所有B实体只是为了计算它们。NHibernate计算列
的伪SQL做什么,我想可能是这样的:
select a.*, count(b.*) from a left join b on b.aid = a.id
这可能与NHibernate的,并且比较特别的LINQ提供程序?
您可以将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网站上有an example of the very problem。很高兴使用,但可能有副作用,你需要成为。计算的列当然不是最新的。这是实体加载时的快照。
你也可以使用HQL来得到一个简单的语法大小:
select a, size(a.Children)
from a
当然,这也返回快照,但是你的业务逻辑是意识到这一点,因此它不是一个副作用。
如果您在集合lazy="extra"
中指定,当您访问集合中的count属性时,nhibernate将只获取子项的数量而不是所有子项的数量。
看到这里(第2项): http://blog.idm.fr/2010/02/improving-performance-with-nhibernate.html
重复:http://stackoverflow.com/questions/3062850 [使用SQL查询NHibernate的映射文件来填充属性(HTTP的 – brainimus 2011-04-07 18:58:07
可能重复:// stackoverflow.com/questions/3062850/use-sql-query-to-populate-property-in-nhibernate-mapping-file) – Chris 2011-04-07 19:25:18