Linq to Sql Insertion与“Foreign Key Same Table constraint”错误冲突

时间:2012-05-29 15:00:34

标签: c# asp.net linq-to-sql

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

欢迎任何想法。

由于 托比

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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