[英]Linq to Sql Insertion conflict with “Foreign Key Same Table constraint” error
我正在使用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;
任何想法歡迎。
謝謝托比
通常使用特殊版本的CMSMenu項目。 它可能被命名為“ null”,並且ID為0或1。它應該用作實際上沒有父項的項的父項。 並且應該從所有查詢中過濾掉它。
這是關系數據庫的弱點之一-您需要使用各種怪癖來存儲諸如樹之類的簡單抽象。
嘗試將MyParentCMSMenu設置為SQL中的可空列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.