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

标签 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 ”中提出的解决方案相同的结果,但从存储过程而不是表中获取结果。

最佳答案

这可以通过命名查询来实现。在这里查看有关命名查询的 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>

关于c# - 如何使用 NHibernate 从存储过程填充实体的子集合/关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12062214/

相关文章:

NHibernate SchemaUpdate 再次添加现有外键?

java - 从 EclipseLink PLSQLStoredProcedureCall 读取 OUT 参数时出现 ClassCastException

mysql - 如何捕获并重新抛出 MySQL 中的所有错误

exception - Sybase存储过程异常处理

c# - 替换\与\\

c# - .Net LINQ - 使用另一个字典过滤字典

nhibernate - 我可以将 NHibernate 配置为在 db 中的值为 null 时抛出异常吗?

linq - NHibernate 克服 NotSupportedException

c# - C#是否可以将基类的实例用于子类的不同实例?

c# - Entity Framework 6.1.1 禁用模型兼容性检查