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;
欢迎任何想法。
谢谢托比
尝试将 MyParentCMSMenu 设置为 SQL 中的可为空的列。
通常使用特殊版本的CMSMenu项目。它可能被命名为"null",其 ID 为 0 或 1。它应该用作实际上没有父项的项目的父项。并且应该从所有查询中过滤掉它。
这是关系数据库的弱点之一——你需要使用各种怪癖来存储简单的抽象,比如树。