0

私は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: 既に使用されているキーを持つエンティティを追加できません。

4

1 に答える 1

1

同じコンテキスト オブジェクトで複数の行を挿入できます。 http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspxhttp: //msdn.microsoft.com/en-us/library/bb425822.aspx、およびその他の多数のオンライン例。重複キーの問題は、linq to sql 構成の問題、またはデータベースの整合性エラーである可能性があります。つまり、テーブルに自然な主キーがあり、同じ自然な主キーを持つ行を複数回挿入しようとしている場合などです。

于 2011-02-05T20:03:20.153 に答える