我有一個實體(「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