外部キーにリンクされているさまざまなテーブルから一連のレコードを削除しています。'SubmitChanges'を呼び出すと、次のエラーが発生します。
DELETEステートメントがREFERENCE制約FK_PTXProductMap_CustomerProduct"と競合しました。データベース"SOTI"、テーブル" dbo.PTXProductMap "、列'InstanceId'で競合が発生しました。ステートメントは終了しました。
SubmitChangesが変更を保存しようとし、2つのレコードに対してDELETE SQL操作が呼び出されない場合に、どのクエリが実行されるかをプロファイラーで調べました。linq2sql-'DELETE'操作が呼び出されることを100%確信しています(次の行にブレークポイントを設定します:
IEnumerable<CustomerProduct> products = DbContext.CustomerProducts
.Where(cp => cp.InstanceId == transition.InstanceId
|| cp.InstanceId == transition.PreInstanceId);
foreach (CustomerProduct cp in products)
{
DbContext.CustomerProducts.DeleteOnSubmit(cp);
}
必要なcpオブジェクトに対して呼び出されたかどうかを確認しました。DELETEは、同じテーブルからの2つの別のレコードに対して呼び出されます...ただし、必要なすべてに対してではありません
なぜこれが起こったのか考えがありますか?そしてそれを解決する方法は?
どんなアイデアでも大歓迎です。
PS私は64ビットWindows7でVS2008SP1、MSSQL2005を使用しています
PPS削除されたスコープにリンクされている別のテーブルのレコードをいくつか検出しました...削除によって現在のエラーが解決されましたが、削除するすべてのレコードに対して「DELETE」操作が生成されなかった理由はまだ不明です。
PPPS別のテーブルペアの場合と非常によく似た状況です。テーブルAには1つのレコードが含まれ、テーブルBにはA.1を参照する3つのレコードが含まれます。1つのトランザクションで削除することはできませんが、手動で(Management Studioを使用して)削除するとBから3つのレコードを削除してから、Aからレコードを削除することができます...なぜですか?