0

我正在使用 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;

欢迎任何想法。

谢谢托比

4

2 回答 2

0

通常使用特殊版本的 CMSMenu 项。它可能被命名为“null”并且 ID 为 0 或 1。它应该用作实际上没有父项的项的父项。它应该从所有查询中过滤掉。

这是关系数据库的弱点之一——您需要使用各种怪癖来存储像树这样的简单抽象。

于 2012-05-29T15:05:58.443 回答
0

尝试将 MyParentCMSMenu 设置为 SQL 中的可为空列。

于 2012-05-29T15:15:50.640 回答