簡體   English   中英

Linq to Sql插入與“外鍵相同表約束”錯誤發生沖突

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM