如何使用NHibernate从存储过程填充实体的子集合/关联

时间:2012-08-21 20:04:49

标签: c# nhibernate stored-procedures nhibernate-mapping nhibernate-criteria

我想知道是否有办法从NHibernate中的存储过程填充递归实体(子集合/关联)。假设我有下一堂课:

public class Category
{
  public int category_id { set; protected get; }
  public string category_description { set; get; }
  public IEnumerable<Category> SubCategories { set; get; }

  ....
}

有没有办法从存储过程中获取根类别列表,这些类别获取一组类别及其整个子树,每个类别在SubCategories属性中都有各自的子项?我希望得到与“Eagerly load recursive relation”中提出的解决方案相同的结果,但是从存储过程而不是表中获取结果。

1 个答案:

答案 0 :(得分:3)

这可以通过命名查询实现。在这里查看有关命名查询的官方NHibernate文档:http://nhibernate.info/doc/nh/en/index.html#querysql-namedqueries

您要做的是使用命名查询的功能,它允许您加入关联:<return-join />

NHibernate博客上还有一个关于同一主题的例子:http://nhibernate.info/blogs/nhibernate/archive/2008/11/24/populating-entities-with-associations-from-stored-procedures-with-nhibernate.aspx

令人着迷的例子:

<sql-query name="GetCategory">
    <return alias="Category" class="Category"/>
    <return-join alias="Subcategory" property="Category.SubCategories">
        <return-property column="Subcategory.SubcategoryId" name="Id" />
    </return-join>
    EXEC someStoredProcedureName :CategoryId
</sql-query>