説明が長いのでご了承ください。
データを挿入するためのマップされたストア手順を使用して、EF4 でテーブルをセットアップしました。
例 :
id | location | type
1 | 10 | 15
5 | 10 | 16
SP が行うことは、場所とタイプに対応する次の ID を別のテーブルでチェックすることです。
したがって、この例では、次の id は
- ロケーション 10 およびタイプ 15 の場合は 2
- 6 場所 10 タイプ 16
これは、EF で結果列をマッピングすることによって機能します。
2 つの異なるキーに同じ連続番号の例がある場合を除き、問題なく動作します。
id | location | type
1 | 10 | 11
1 | 10 | 10
編集:このエラーは、両方の新しい行を同時に作成しているときに発生します。
両方の次の値は 2 です。データはデータベースに保存されますが、アプリケーションは次のメッセージで失敗します。
データベースへの変更は正常にコミットされましたが、オブジェクト コンテキストの更新中にエラーが発生しました。ObjectContext が矛盾した状態にある可能性があります。
内部例外メッセージ:
オブジェクトのキー値が ObjectStateManager 内の別のオブジェクトと競合するため、AcceptChanges を続行できません。
AcceptChanges を呼び出す前に、キー値が一意であることを確認してください。
何かアドバイス?
ストアド プロシージャの例を編集
@nextNumber int を宣言
SELECT @nextNumber = value + 1 FROM SEQUENTIAL_TABLE WHERE location = @location および type=@type
INSERT INTO TABLE (location, type, id ,......) VALUES (@location, @type,@nextnumber, .......)
UPDATE SEQUENTIAL_TABLE SET 値 = @nextNumber WHERE 場所 = @location およびタイプ =@type
@nextNumber を [NextNumber] として選択