私はWindowsアプリケーションを持っています。DataContext を介してレコードを挿入しようとしています。テーブル内に一意の識別子があります。私も挿入後にトリガーを実行しています。そのため、トリガーの最後に選択クエリを作成して、自動ジェネレーター番号を取得し、自動同期エラーを回避しています。Windowsアプリケーションなので、コンテキストを長期間保持できます。新しいオブジェクト (注文など) を作成し、以前と同じ操作を行うと、SubmitChanges 操作で、キーを重複させることはできません。この同じコンテキストを使用して 2 番目のレコードを挿入できないのはなぜですか? それとも、新しいレコードを挿入するために新しいコンテキストを作成する必要がありますか?(この作業単位の概念はここに含まれますか?)。すべてのデータを再度ロードする必要があるため、新しいコンテキストを作成することはお勧めできません..
何か考えはありますか?
私の状況を説明するためのコードサンプル:
CallCenterLogObjCotext = (CallCenterLogObjCotext == null ? (new CallcenterLogContext) : (CallCenterLogObjCotext));
CallDetail newCallDetailsOpenTicket = new CallDetail();
newCallDetailsOpenTicket.CallPurpose = (from callpuposelist in CallCenterLogObjCotext.CallPurposes
where callpuposelist.CallPurposeID == ((CallPurpose)(cbcallpurpose.SelectedItem)).CallPurposeID
select callpuposelist).FirstOrDefault();
このような設定がたくさん...
CallCenterLogObjCotext.CallDetails.InsertOnSubmit(newCallDetailsOpenTicket);
CallCenterLogObjCotext.SubmitChanges();
上で述べたように、これは Windows フォームの [チケットを開く] ボタンをクリックすることです。fname、lname、およびそのフォームで使用可能なテキストボックス内のすべての値を変更し、同じボタンをクリックしました。したがって、同じメソッドが再度呼び出されます。以下の指定されたエラーが表示されます。
System.Data.Linq.DuplicateKeyException: 既に使用されているキーを持つエンティティを追加できません。