2012-07-05 90 views
0

我有一個NHibernate的分離條件查詢有幾個內部連接,當我得到它生成的SQL語句時,它似乎有很多列在投影中,我不實際上需要。最煩人的是這會對性能產生重大影響。NHibernated生成的選擇查詢有太多的投影

例如所生成的查詢可能看起來像

select a.a, a.b, a.c .... a.z, 
    b.a, b.b, b.c .... b.z 
    from ... 
    where... 

但是我其實想要知道的就是

select a.* 
    from ... 
    where... 

我試圖找到任何資源,可幫助我解決這個使用結果變換器或其他方法,因爲我對標準API的瞭解相當不成熟。

這可能嗎?

回答

1

在數據庫上選擇*不被認爲是最佳做法。你會發現無盡的評論引用。所以寧可避免選擇*。您可以使用QueryOver或Linq語法在NHibernate中使用投影,並僅爲您需要的列生成SQL選擇。

  var trades = _session.QueryOver<Trade>() 
       .SelectList(list => list 
             .Select(x => x.Name)) 
       .List<object>(); 

  var trades = _session.Query<Trade>() 
        .Select(x => new 
            { 
              x.Name 
            }) 
        .ToList(); 
+0

感謝。但這不是我期望的答案:-) – TWickz 2012-07-10 05:06:27

+0

這個答案完全符合你的要求。 – Chev 2012-07-10 08:56:55

+0

我遇到了一些由於延遲加載而未正確加載的屬性的問題,當我使用這個接近。這就是爲什麼我使用自定義dto和結果轉換器。 – TWickz 2012-07-10 09:46:53