我正在尝试让NHibernate(3.3.1)加载递归父/子类别关系。
public class Category
{
public virtual int Id { get; set; }
public virtual bool IsActive { get; set; }
public virtual string Name { get; set; }
public virtual Category Parent { get; set; }
public virtual IList<Category> Children { get; set; }
public Category()
{
Children = new List<Category>();
}
public virtual int GetChildCount()
{
return Children.Count;
}
}
我的XML Mapping ...
<class name="nHibernatePOC.Domain.Category, nHibernatePOC" lazy="true">
<id name="Id" column="CategoryId">
<generator class="identity" />
</id>
<property name="Name" column="Name" />
<property name="IsActive" column="IsActive" />
<many-to-one name="Parent" class="nHibernatePOC.Domain.Category" column="ParentCategoryId" />
<bag lazy="true" name="Children">
<key column="ParentCategoryId" />
<one-to-many class="nHibernatePOC.Domain.Category" />
<loader query-ref="GetCategoryByParentId"/>
</bag>
</class>
我的问题是,当我尝试访问Children.Count
时,我收到NullReferenceException
因为Parent
可能为空。
答案 0 :(得分:0)
为了将来参考,该问题与用于加载子集合的存储过程有关。 (而不是从表/视图延迟加载)。值得庆幸的是,我可以从视图加载而不是使用存储过程。
当我删除<loader
元素并恢复使用数据库视图(MSSQL 2012)时,它按预期工作。
非常奇怪,对于任何需要使用存储过程的人都很抱歉,但我猜这是在这种情况下删除它们的一个很好的理由。