Linq 到 SQL 插入与“外键同表约束”错误冲突

本文关键字:表约束 错误 冲突 SQL 插入 Linq | 更新日期: 2023-09-27 18:35:50

我正在使用Linq 2 SQL来快速淘汰定制的CMS。

我有一个与自身关联的表,以便任何子菜单都映射到同一表中的任何父菜单,但是我在插入第一个父菜单时遇到问题。

该表看起来有点像这样:

CMSMenu
     CMSMenuID
     ParentCMSMenuID    
     Name
     Link

CMSMenu.CMSMenuID -> CMSMenu.ParentCMSMenuID

在以前版本的数据库/代码中,我只需添加一些代码,例如:

  itm = new CMSMenu();
  itm.ParentCMSMenuID = 0; 
  rep.CMSMenus.InsertOnSubmit(itm);

但是,由于此数据库是使用所有外键自动创建的,因此此代码会导致异常:

插入语句与外键同一表冲突 约束"CMSMenu_CMSMenu"。数据库中发生冲突 "sp.ackahs",表"dbo。CMSMenu",列"CMSMenuID"。声明 已终止。

如何插入顶级菜单(即没有父菜单)?

由于它没有父级,所以我无法添加:

itm.MyParentCMSMenu=*existing cmsmenu item*;

就像我对儿童菜单一样,我也不能添加:

itm.MyParentCMSMenu=null;

欢迎任何想法。

谢谢托比

Linq 到 SQL 插入与“外键同表约束”错误冲突

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

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

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