C# 使用EF或NHibernate的存储库模式中的层次结构
请提供有关如何使用EF4(代码优先)或nHibernate的存储库模式管理层次结构的方法/教程? 例如,假设我必须显示以下内容:C# 使用EF或NHibernate的存储库模式中的层次结构,c#,entity-framework,nhibernate,hierarchical-data,C#,Entity Framework,Nhibernate,Hierarchical Data,请提供有关如何使用EF4(代码优先)或nHibernate的存储库模式管理层次结构的方法/教程? 例如,假设我必须显示以下内容: Topic -> Comment1 -> Comment1_1 -> Comment1_2 -> Comment1_2_1 理想的类结构是什么?它应该如何与ORM和存储库模式联系起来?有很多关于repository模式和EF/nHibernate的文章,但我找不到一篇使用分层结构的文章 我对班级结构的思考: Clas
Topic
-> Comment1
-> Comment1_1
-> Comment1_2
-> Comment1_2_1
理想的类结构是什么?它应该如何与ORM和存储库模式联系起来?有很多关于repository模式和EF/nHibernate的文章,但我找不到一篇使用分层结构的文章
我对班级结构的思考:
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
}
可能您正在尝试将树映射到关系模型。看一看。可能您正在尝试将树映射到关系模型。看一看。如果每条评论都提到了父主题,你就不需要做更多的事情了。您将始终使用所有相关注释加载主题,并在应用程序逻辑中遍历层次结构,因为注释将正确配置父对象(在这种情况下,它还应该具有依赖项集合,以使遍历更容易) 因此,使用此结构的算法应为:
TopicId
,尽管它在层次结构中的位置不同)-所有EF内容都在这里结束,因为您拥有所需的所有数据更复杂的情况是,如果要单独处理某些注释,例如,获取某些指定注释的注释层次结构。在这种情况下,必须使用本机SQL加载注释,并利用CTE(公共表表达式-仅限SQL Server 2005和更新版本)进行分层查询。@pbrovik发布的文章中描述了这种方法,EF的情况非常类似。如果每条评论都引用了父主题,您就不需要做更多的事情了。您将始终使用所有相关注释加载主题,并在应用程序逻辑中遍历层次结构,因为注释将正确配置父对象(在这种情况下,它还应该具有依赖项集合,以使遍历更容易) 因此,使用此结构的算法应为:
TopicId
,尽管它在层次结构中的位置不同)-所有EF内容都在这里结束,因为您拥有所需的所有数据更复杂的情况是,如果要单独处理某些注释,例如,获取某些指定注释的注释层次结构。在这种情况下,必须使用本机SQL加载注释,并利用CTE(公共表表达式-仅限SQL Server 2005和更新版本)进行分层查询。@pborvik发布的文章中描述了这种方法,EF的情况非常类似。Hi。。谢谢这当然是理想的。然而,我看到过一些网站,评论部分加载,当你不断滚动时,大量的评论不断被添加。这可能可以通过使用Take()Skip()方法实现,但有趣的是要加载多少。一个顶级注释应该得到所有子注释。在这种情况下,您必须使用SQL来控制每个查询加载的顶级注释的数量。每个顶级组件也将加载其所有依赖项。嗨。。谢谢这当然是理想的。然而,我看到过一些网站,评论部分加载,当你不断滚动时,大量的评论不断被添加。这可能可以通过使用Take()Skip()方法实现,但有趣的是要加载多少。一个顶级注释应该得到所有子注释。在这种情况下,您必须使用SQL来控制每个查询加载的顶级注释的数量。每个顶级组件也将加载其所有依赖项。