“在一组变化中检测到一个循环”当尝试向数据库添加循环链表时

发布于 2024-10-30 09:52:38 字数 326 浏览 1 评论 0原文

我正在使用“数据库内”循环链表(cll)。我使用 Linq to Sql 插入形成这些 cll 的数据库条目。

它们具有一般形式:

id uuid | nextId uuid | current bit

如果我尝试使用形成完整 cll 的几个对象执行 SubmitChanges,我会收到错误“在更改集中检测到循环”。

我可以通过在单独的 SubmitChanges 中使链接列表“循环”来规避此问题,但这有两个缺点:我失去了在一个事务中执行此操作的能力。在一小段时间内,我的数据库中的数据不正确。

有办法解决这种行为吗?

I'm using a 'in database' circularly linked list (cll). I'm inserting the database entries forming these cll's using Linq to Sql.

They have the general form:

id uuid | nextId uuid | current bit

If i try to do a SubmitChanges with a few objects forming a complete cll, i get the error "A cycle was detected in the set of changes".

I can circumvent this by making the linked list 'circular' in a separate SubmitChanges, but this has two down sides: I'm losing my capability to do this in one transaction. For a small period the data in my database isn't correct.

Is there a way to fix this behaviour?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

秋心╮凉 2024-11-06 09:52:38

数据库需要强制执行其约束,我想您在 nextIdId 之间有一个外键约束。如果这条关系链回到起点(正如您所发现的),数据库将不允许这样做。

我怀疑您的选择是:

  1. 删除外键约束。
  2. 以链表形式存储在数据库中,并且在代码中仅将头部与尾部连接起来。

即使您的第二个选项也不起作用,因为数据库不允许您添加最后一个引用。

The database needs to enforce its contraints, and I imagine you have a foreign key constraint between nextId and Id. If this chain of relations leads back to the start (as you have found) the database will not allow it.

I suspect your choices are:

  1. Remove the foreign key constraint.
  2. Store in the DB as a linked list, and only join the head with the tail in your code.

Even your second option won't work, as the DB won't allow you to add this last reference.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文