2011-04-04 55 views
2

我正在使用'在數據庫'中的循環鏈接列表(cll)。我使用Linq to Sql插入形成這些cll的數據庫條目。「在一組更改中檢測到循環」嘗試向數據庫添加循環鏈接列表時

他們的一般形式:

id uuid | nextId uuid | current bit 

如果我嘗試做一個與的SubmitChanges幾個對象形成一個完整的CLL,我得到的錯誤「中的一組更改檢測到循環」。

我可以通過在單獨的SubmitChanges中創建鏈接列表'circular'來規避這種情況,但這有兩個缺陷:我在一次事務中失去了我的能力。在一段時間內,我的數據庫中的數據不正確。

有沒有辦法解決這個問題?

回答

2

數據庫需要強制執行其約束,我想你有一個外鍵約束nextIdId之間。如果這個關係鏈回到起點(就像你發現的那樣),數據庫將不允許它。

我懷疑你的選擇是:

  1. 刪除外鍵約束。
  2. 作爲鏈接列表存儲在數據庫中,並且只能在代碼中將尾部加入頭部。

即使您的第二個選項也不起作用,因爲數據庫不會允許您添加最後一個參考。

+0

我沒有外鍵約束,在這些領域。這是一個框架錯誤,而不是數據庫錯誤。我可以證明我的* hack *作品;)。 – JJoos 2011-04-04 12:37:03

+0

啊,在這種情況下,您可能會遇到第2項或您提出的解決方案 – 2011-04-04 12:38:17

+0

您的第二種解決方案可能會起作用。它會引入一些額外的簿記來跟蹤鏈表中的第一項。但這意味着我的數據庫中沒有錯誤的數據。如果沒人知道如何關閉這個錯誤(或者爲什麼會拋出這個錯誤有一個很好的解釋),我會接受你的答案。 – JJoos 2011-04-04 12:45:15