3
我使用NHibernate和我有3映射類 - A,B,C類看起來如下:NHibernate的:投影和引用類型的屬性
public class A
{
public virtual string StringProp1 { get; set; }
public virtual string StringProp2 { get; set; }
public virtual B BProp { get; set; }
public virtual C CProp { get; set; }
}
一切工作正常,但我想做的是一些優化。我的目的是有可能動態指定哪些屬性應該加載(從數據庫)。所以我不能將一些屬性標記爲映射中的懶惰。我認爲它應該工作方式如下:
ICriteria criteria = session.CreateCriteria<A>();
criteria.SetProjection(Projections.ProjectionList()
.Add(Projections.Property("StringProp1"), "StringProp1")
.Add(Projections.Property("BProp"), "BProp"));
criteria.SetResultTransformer(Transformers.AliasToBean<A>());
return criteria.List<A>();
但是,這並不爲引用類型屬性(如BProp)工作,即使我加入了一個別名的標準。我在最後一行得到'索引超出數組範圍'異常。
如果我刪除添加了BProp的投影的行,這將工作並返回一個只有StrinProp1填充值的類的實例。但我想要將相應的B類實例加載到BProp中。
有什麼建議嗎?
我想加載BProp和StringProp1性質,但不cprop可與StringProp2(爲了使結果的SQL語句簡單,更快)。我不認爲FetchMode是我正在尋找的。 – mayor