首页 新闻 会员 周边

EF Code Frist 单表多对多的问题

0
悬赏园豆:50 [已解决问题] 解决于 2014-07-23 17:16

codefrist的菜单Model单表-多对多(也就是每个model元素都可以有无限个子节点(List<菜单>)和父节点(List<菜单>))的关系,而且查询的时候还要去确定根节点停止遍历子节点的属性,方便我递归出一个菜单列表,请问这个要怎么实现,我已经纠结很多天了,求大神帮忙?

hey,的主页 hey, | 初学一级 | 园豆:48
提问于:2014-07-17 21:23
< >
分享
最佳答案
0

首先理解上我觉得菜单就是一对多的关系,而不是多对多,一个节点有N个子节点,但它只有一个父节点。一对多的情况下,可以通过自连接来实现

 public class Menu
    {
        public Menu()
        {
            Menus = new HashSet<Menu>();
        }
        public int LayerCount { get; set; }//用来记录菜单是第几层

        public virtual ICollection<Menu> Menus { get; set; }
    }

当然了,如果你的菜单真的是多对多,那就要手工建立一个表,MenuToMenu,记录menu的两个ID就可以了。

收获园豆:35
happydaily | 菜鸟二级 |园豆:301 | 2014-07-18 08:30

谢谢您的回答,需求确实是单表多对多

按照您说的,我应该新建一个关系Model,对吗?

这个关系里面因为是多对多,我弄了一个是否为最后一个节点(最后一个节点就是我武断的认为它就是最后一个叶子节点,其实它下面还可以有其他节点,比如说死循环,A-B,B-A)的属性,如果是最后一个节点,就不再继续遍历它下面的节点,直接return。

最后一个节点的属性应该放到关系Model里面,新增一个字段就可以了,但是我这样添加一条记录的时候,是不是同时要操作(关系和菜单)Model,才能实现添加,并且确定是否为最后一个节点

还有一个就是根节点,我要如何确定哪一个是根节点?

菜单Model,和关系Model是如何建立联系的,可不可举个例子说明一下,非常感谢~

hey, | 园豆:48 (初学一级) | 2014-07-18 09:30

@枫叶染深秋: 多对多之间相互引用,这谁是头谁是尾这个问题超出我的能力范围了。。。。

建立关系就是再建立一个表,

public class MenuToMenu
    {
        [Key]
        public int ID { get; set; }

        public int MenuID1 { get; set; }

        public int MenuID2 { get; set; }
    }
happydaily | 园豆:301 (菜鸟二级) | 2014-07-18 14:33

@枫叶染深秋: 根节点可以这样查,MenuModel的ID在MenuToMenu.MenuID2中没有的,最后一个节点可以MenuModel的ID在MenuToMenu.MenuID1中没有的.

happydaily | 园豆:301 (菜鸟二级) | 2014-07-18 20:29

@happydaily: 虽然答案不是很满意,还是谢谢你~

hey, | 园豆:48 (初学一级) | 2014-07-23 17:17
其他回答(1)
0

这种递归菜单一般都是设计一张表 Id,Pid,Name 这种结果,就可以实现递归了。

你现在的问题在哪里?

收获园豆:15
Alex_QY1987 | 园豆:1888 (小虾三级) | 2014-07-18 09:29

就是我无法确定根节点和last节点

支持(0) 反对(0) hey, | 园豆:48 (初学一级) | 2014-07-18 17:07

@枫叶染深秋: 根结点的PID用0,判断LAST节点得判断一下PID等于当前ID的COUNT这样。

支持(0) 反对(0) Alex_QY1987 | 园豆:1888 (小虾三级) | 2014-07-18 17:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册