我正在使用Linq 2 Sql来淘汰一个快速定制的CMS。
我有一个与自身关联的表,因此任何子菜单都映射到同一个表中的任何父菜单,但我在插入第一个父项时遇到问题。
表格看起来有点像这样:
CMSMenu
CMSMenuID
ParentCMSMenuID
Name
Link
与
的关联CMSMenu.CMSMenuID -> CMSMenu.ParentCMSMenuID
在以前版本的数据库/代码中,我只需添加一些代码,如:
itm = new CMSMenu();
itm.ParentCMSMenuID = 0;
rep.CMSMenus.InsertOnSubmit(itm);
但由于此数据库是使用所有外键自动创建的,因此该代码会导致异常:
INSERT语句与FOREIGN KEY SAME TABLE冲突 约束“CMSMenu_CMSMenu”。冲突发生在数据库中 “sp.ackahs”,表“dbo.CMSMenu”,列'CMSMenuID'。该声明 已被终止。
如何插入顶级菜单(即没有父级)?
因为它没有父母所以我不能添加:
itm.MyParentCMSMenu=*existing cmsmenu item*;
正如我可以使用子菜单一样,我也不能添加:
itm.MyParentCMSMenu=null;
欢迎任何想法。
由于 托比
答案 0 :(得分:0)
通常使用特殊版本的CMSMenu项目。它可以命名为“null”并且具有ID 0或1.它应该用作实际上没有父项的项的父项。它应该从所有查询中过滤掉。
这是关系数据库的弱点之一 - 你需要使用各种怪癖来存储像树一样的简单抽象。
答案 1 :(得分:0)
尝试将MyParentCMSMenu设置为SQL中的可为空的列。