首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用EF或NHibernate的存储库模式中的层次结构

使用EF或NHibernate的存储库模式中的层次结构
EN

Stack Overflow用户
提问于 2012-02-04 15:49:36
回答 2查看 906关注 0票数 0

请建议使用EF4 (代码优先)或nHibernate?的存储库模式管理分层结构的方法/教程。

例如,假设我必须显示以下内容:

代码语言:javascript
复制
Topic
 -> Comment1
   -> Comment1_1
   -> Comment1_2
      -> Comment1_2_1

什么是理想的类结构,它应该如何与ORM和存储库模式相结合?有很多关于存储库模式和EF/nHibernate的文章,但是我找不到一篇用分层结构使用它们的文章。

我对班级结构的思考:

代码语言:javascript
复制
Class Topic 
   {
   public int ID {get;set;}
   public string Topic {get;set;}
   }

Class Comment
   {
   Public int ID {get;set;}
   Public int TopicID {get;set}
   Public string Comment {get;set;}
   Public int ParentID {get;set;}   //recursion will happen here
   Public int Level {get;set;} //Can be used to bypass recursion and display topic with all comments with indention based on Level
   }
EN

回答 2

Stack Overflow用户

发布于 2012-02-04 17:06:45

可能您正在尝试将一棵树映射到关系模型。看看如何在nhibernate中映射树

票数 2
EN

Stack Overflow用户

发布于 2012-02-04 17:59:59

如果每个评论都引用了父主题,那么您就不需要做更多的事情了。您将始终在应用程序逻辑中加载带有所有相关注释和遍历层次结构的主题,因为注释将具有正确配置的父级(在本例中,它还应该有依赖项的集合,以使遍历更容易)。

因此,使用这种结构的算法应该是:

  1. 加载主题和所有相关注释(尽管在层次结构中的位置不同,每个注释都有TopicId )-所有EF内容在这里结束,因为您有所需的所有数据
  2. 处理ParentId为空的所有注释
  3. 对于每个处理过的注释,做您需要的一切
  4. 对于当前处理的注释的每个依赖注释,转到3。(递归)

更复杂的情况是,如果您想单独处理一些注释--例如,获取某些指定注释的注释层次结构。在这种情况下,您必须使用本机SQL加载注释,并利用CTE (仅用于Server 2005和更新的公共表表达式)进行层次化查询。在@pborovik发布的文章中描述了这种方法,并且在EF的情况下非常相似。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9142089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档