現在、DataContext.SubmitChanges() を呼び出すときに「一連の変更でサイクルが検出されました」という例外が発生するアプリケーションを開発しています。この例外がスローされる理由はわかっていますが、状況の修正を見つけることができませんでした。状況を説明しましょう。以下に示すようなテーブルを持つデータベースがあり、LINQ to SQL でアクセスして vb.net のクラスにマップされます。
Device
-------
ID
DefaultGatewayID
DefaultGatewayID はデバイスであり、同じオブジェクトまたは別のデバイスにすることもできます。ユーザーは、DataGrid を備えた GUI を使用して、新しいレコードを変更および追加します。記録の更新は問題ありません。ID は既に存在し、DefaultGatewayObject がレコードに関連付けられています (ID はデータベースに保存されます)。
ただし、新しいレコードを追加して同じトランザクションで DefaultGatewayObject を設定しようとすると、「一連の変更で検出されたサイクル」という例外が発生します。この場合は同じ項目ですが、最初に追加するレコードがわからないため、LINQ to SQL が原因であると思われます。
送信ボタンが SubmitChanges を実行する XAML コマンドにバインドされているため、挿入を 2 つの部分に分割するオプションはありません。1 つはデバイス用で、次に DefaultGateway を追加します。
理想的には、どのオブジェクトを最初に作成するか、またはそのようなものを指定するオプションが必要です。それ自体への接続を削除して、このフィールドに ID を設定するだけのオプションだと思いますが、LINQ to SQL 内で修正を見つけたいと思います。
SOがこれに対する答えを持っていることを願っています。この関連記事「循環リンクリストの追加中にサイクルが検出されました」しか見つかりませんでした