1

私のはWindowsアプリケーションです。LINQ 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: 既に使用されているキーを持つエンティティを追加できません。

ありがとう。

4

1 に答える 1

0

この質問を見てください。それはあなたの例外を扱い、解決策を提案します:

ON INSERT: 既に使用されているキーを持つエンティティを追加することはできません

于 2011-04-13T15:05:32.510 に答える