我是新的stackoverflow,我希望這個問題將不勝感激。NHibernate預測(QueryOver.SelectList)限制
簡單地說:我選擇從表x x左外連接表y中的所有東西。表x有太多的列,所以我讓新的對象x。該對象用於投影。我可以投影表格x的每一列我想要的。但是當我嘗試投影/選擇一個集合(表y的集合),然後我得到同樣的錯誤:'索引超出數組的界限'。
我的問題:NHibernate是否支持選擇/項目集合呢?因爲我通過搜索谷歌(和stackoverflow)多次看到這個問題,但沒有任何問題得到解答。
代碼示例:
public class X
{
public virtual int ID { get; set; }
public virtual int IDontNeedMoreInfoAboutClassXItTakesToMuchTimeToRetrieve { get; set; }
public virtual IList<Y> YCollection { get; set; }
}
public class Y
{
public virtual int YID { get; set; }
}
public class XRepository{
public ISession Session {get; set;}
public IList<X> Get()
{
X xAlias = null;
Y yAlias = null;
X resultAlias = null;
return Session.QueryOver<X>()
.JoinAlias(() => xAlias.YCollection,() => yAlias, JoinType.LeftOuterJoin)
.SelectList(list => list
.SelectGroup(() => xAlias.ID).WithAlias(() => resultAlias.ID)
.SelectGroup(() => xAlias.YCollection).WithAlias(() => resultAlias.YCollection)) // Index was outside the bounds of the array
.TransformUsing(Transformers.AliasToBean<X>()).List<X>();
}
}
那麼'X'是DTO還是映射類? –
好問題:X是一個映射類。我知道我也使用一個映射類作爲結果(resultAlias),但是如果我使用dto或映射類作爲返回對象,它並沒有太大區別。它只關於忽略select語句中的某些列。 – PcPulsar
我不認爲你必須自己進行連接。如果'Y'集合被正確映射,那麼你所要做的就是'Session.QueryOver().Fetch(x => x.YCollection).Eager'。 nHib會爲你生成左外連接。任何你不想要的'X'屬性都可以設置爲'Fetch()。懶惰' –