2011-04-04 23 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