2011-12-19 9 views
1

トランザクションでDataContextを使用しているインサートが大量にあります。 Iオブジェクトの二種類の挿入:私のような多くのSQLインサート実行しないAとBSystem.Data.Linq.DataContextを使用してSQL Serverに挿入するときのエラー

を:

db.ExecuteCommand(sql.ToString(), processedParams.ToArray()); 

テーブルBに別々

INSERT INTO A (...) VALUES ('11111111-1111-1111-1111-111111111111',..) 
INSERT INTO B (...) VALUES (
    '21111111-1111-1111-1111-111111111111', 
    '11111111-1111-1111-1111-111111111111',...) 

はA.

への外部キーを持っています

時々、次のようなエラーが発生します。 テーブル "A"のFOREIGN KEY制約 "FK_B_A"に違反しました。列「GUID」。

すべてのレコードがDBに挿入されることがあります。動的に生成されるGUIDを除いて、データ束は常に同じです。

Bへの挿入が時々A.

+0

あなたのエラーはあなたのコード内で間違っています。あなたはコミットをしていますか?バルクインサートとコミットのようにしていますか?トランザクションを介して行うとき、エラーはコミットコール..私は単一の挿入を行うことを提案し、あなたが挿入しようとしている重複するキーを把握するためにコミットすることをお勧めします。C#のメソッドを使用して生成し、新しいGIUDを返すのは一般的にユニークなキーなので、同じキー...外部キー制約が生成されます。 – MethodMan

+0

あなたは正しく挿入されているSQLインサートを知っていますか? 'INSERT INTO A(列名)VALUES(実際の値)'です。クエリ文字列を作成する場所のコードサンプルは、この問題の特定に役立ちます。 –

+0

申し訳ありませんサンプルを書くときに間違います。場合によっては、すべてのレコードが正常にDBに挿入されることがあります。 – gabba

答えて

1

ありがとうございました。

私のサービスでは、トランザクションクリーンアッププロセスでバグの副作用がありました。非常に長いトランザクションをロールバックします。 Aのレコードが存在しなくなったため、表Aと表Bに挿入する間にクリーンアップが発生すると、エラーがスローされます。

+0

うれしいです!あなたはこの質問を閉じてもらえますか? – ivowiblo

4

に挿入する前に発生するようです注文が何らかの形でスワップされる可能性があります見えます。

insertstable Aに、それ以降はinsertstable Bに設定することをお勧めします。


また、あなたが投稿した投稿が間違っているようです。

たとえば、hereを参照してください。

+0

あなたが正しいように見えます。私はその方法を挿入しようとします。 – gabba

+0

プログラムを書き直して、すべてをテーブルAに挿入すると、すべてがテーブルBに挿入されます。エラーは常に再現します。 – gabba

+0

しかし、レコードの数が少ない(10-20)レコードを挿入しようとするとすべてokです。 – gabba

関連する問題