1

我目前正在开发一个应用程序,其中在调用 DataContext.SubmitChanges() 时遇到异常“在一组更改中检测到循环”。我知道为什么会引发此异常,但我无法找到适合我情况的解决方法。让我解释一下情况。我有一个带有如下所示表的数据库,我使用 LINQ to SQL 访问该表,因此它被映射到 vb.net 中的类。

Device
-------
ID
DefaultGatewayID

DefaultGatewayID 是一个设备,甚至可以是同一个对象或另一个设备。用户使用带有 DataGrid 的 GUI 来更改和添加新记录。更新记录没问题。ID 已经存在,并且 DefaultGatewayObject 已附加到记录(ID 存储在数据库中)。

但是,当我尝试添加新记录并在同一事务中设置 DefaultGatewayObject 时,我得到“在一组更改中检测到循环”异常。我怀疑这是由 LINQ to SQL 引起的,因为它不知道首先添加哪条记录,尽管在这种情况下它是相同的项目。

我没有将插入分成两部分的选项,一个用于设备,然后添加 DefaultGateway,因为我的提交按钮绑定到执行 SubmitChanges 的 XAML 命令。

理想情况下,我会有一些选项来指定首先创建哪个对象,或者类似的东西。我认为这是删除与自身的连接并仅在此字段中设置 ID 的选项,但我宁愿在 LINQ to SQL 中找到修复程序。

我希望SO对此有答案。我只能找到这个相关的帖子“添加循环链表时检测到循环”

4

1 回答 1

1

如果将代码包装在TransactionScope.

Using trans As New TransactionScope()
    'Code that generates a new ID in the database
    dc.SubmitChanges()

    'Code that uses the new ID value.
    dc.SubmitChanges()

    trans.Complete()
End Using

这是避免异常的唯一方法。如果由于架构决策而无法实现(“我的提交按钮绑定到 XAML 命令”),则需要更改架构。我认为 UI 命令无论如何都不应该离数据访问层这么近。您最好从 XAML 调用服务方法。

于 2013-08-09T09:16:11.407 回答