NHibernate'类别'子/父映射(XML)

时间:2013-05-13 15:56:47

标签: c# nhibernate nhibernate-mapping

我正在尝试让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可能为空。

1 个答案:

答案 0 :(得分:0)

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

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

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