NHibernate:投影和引用类型属性

时间:2011-10-06 04:53:37

标签: .net nhibernate

我正在使用nHibernate,我有3个映射类--A,B,C。类A看起来如下:

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; }
}

一切正常,但我想做的是一些优化。我的目的是有可能动态指定应该加载哪些属性(来自DB)。所以我不能在映射中将某些属性标记为惰性。我认为它的工作方式如下:

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投影的行,这将起作用并返回A类的实例,其中只有StrinProp1被赋值。但我想将相应的B类实例加载到BProp中。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

听起来不是正确的做事方式。如果您正在尝试加载BProp,那么您应该采取以下措施:

criteria.SetFetchMode("BProp", SetFetchMode.Eager);