1

我正在尝试让 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 映射...

 <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可以为空。

4

1 回答 1

0

为了将来参考,该问题与用于加载子集合的存储过程有关。(而不是从表/视图延迟加载)。谢天谢地,我可以从视图加载,而不是使用存储过程。

当我删除<loader元素并恢复使用数据库中的视图(MSSQL 2012)时,它按预期工作。

非常奇怪,对任何需要使用存储过程的人表示抱歉,但我猜在这种情况下删除它们是一个很好的理由。

于 2013-05-14T11:20:33.137 回答