【发布时间】:2012-08-21 20:04:48
【问题描述】:
我想知道是否有一种方法可以从 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”中提出的解决方案相同的结果,但从存储过程而不是表中获取结果。
【问题讨论】:
-
我不知道。如果不构建 SQL 本身,Hibernate 将不知道如何将结果映射回实例。假设你不知道要走多深——通过投影你可能能够重建一些,但不知道每件事有多少层,或者不让它们都具有完全相同的深度,这是行不通的。如果它是一个存储过程,为什么还要使用 Hibernate?您可以跳过它并为自己省去麻烦。如果您需要对任何类别进行更改,请在已更改的实例上使用 Merge 将它们一一推回 Hibernate 的会话中。
-
有点类似于 Jon 的评论,但方法不同:为什么要为此使用用户存储过程?它们增加了什么价值?
-
我想使用存储过程,因为我需要过滤结果,包括 root 和 children,我没有找到仅使用 Criteria 的方法。
标签: c# nhibernate stored-procedures nhibernate-mapping nhibernate-criteria