请建议使用EF4(代码优先)或nHibernate的存储库模式管理层次结构的方法/教程?
举个例子,假设我要显示以下内容:
Topic
-> Comment1
-> Comment1_1
-> Comment1_2
-> Comment1_2_1
什么是理想的类结构?如何与ORM和存储库模式连接?关于存储库模式和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
}
答案 0 :(得分:2)
可能你正在尝试将树映射到关系模型。看看how to map a tree in nhibernate。
答案 1 :(得分:1)
如果每条评论都引用了父主题,则无需再做任何其他事情。您将始终在应用程序逻辑中加载包含所有相关注释和遍历层次结构的主题,因为注释将具有正确配置的父级(在这种情况下,它还应具有依赖项集合以使遍历更容易)。
因此,使用此结构的算法应为:
TopicId
,尽管它在层次结构中的位置) - 所有EF内容都在此结束,因为您拥有所需的所有数据更复杂的情况是,如果您想单独使用某些注释 - 例如,获取某些指定注释的注释层次结构。在这种情况下,您必须使用本机SQL来加载注释并利用CTE(公用表表达式 - 仅SQL Server 2005和更高版本)进行分层查询。该方法在@pborovik发布的文章中有描述,在EF的情况下非常相似。