[英]NHibernate: SQL query results mapping
我在NHibernate 3.1.0.4000(我正在使用MS SQL Server 2005數據庫)中遇到SQL查詢結果的問題。 我有兩個表: Adverts
和Investments
,它們映射到實體: Advert
和Investment
。 Adverts
通過InvestmentId
列(和外鍵)與Investments
相關聯。
為了保存查詢結果,我創建了一個以下內部類:
class InvestmentWithAdvertsCount
{
public Investment inv { get; set; }
public int cnt { get; set; }
}
查詢如下:
var investementsWithAdvertCounts = _session.CreateSQLQuery(
"select {inv.*}, (select count(1) from Adverts where InvestmentId = inv.Id) cnt from Investments inv")
.AddScalar("cnt", NHibernateUtil.Int32)
.AddEntity("inv", typeof(Investment))
.SetResultTransformer(NHibernate.Transform.Transformers.AliasToBean(typeof(InvestmentWithAdvertsCount)))
.List<InvestmentWithAdvertsCount>();
當我運行此查詢時,我收到一個InvestmentWithAdvertsCount
實例的集合,它具有正確填充的cnt
屬性,但inv
屬性設置為null
。 我花了一些時間深入研究NHibernate源代碼,似乎inv別名在某種程度上從查詢中丟失了,NHibernate甚至都沒有嘗試填充inv
屬性。 如果我刪除.SetResultTransformer
部分,我會收到一個數組列表(類型為object[2]
),第一個元素設置為Investment
實體,第二個元素設置為相應的廣告計數。 您能否告訴我如何更改此查詢以使InvestmentWithAdvertsCount
正確填充? 或者可能有一種方法可以將此查詢重寫為QueryOver,Criteria或HQL(保持生成的SQL代碼有效)?
對於這個問題,我會非常感激。 謝謝
這是一個干凈的方法,使用非常簡單的LINQ to對象處理結果:
session.CreateSQLQuery(
"select {inv.*}, (select count(1) ... inv")
.AddScalar("cnt", NHibernateUtil.Int32)
.AddEntity("inv", typeof(Investment))
.List<object[]>()
.Select(x => new InvestmentWithAdvertsCount {inv = x[0], cnt = x[1]})
.ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.