2011-06-24 4 views
1

ここは私の次のコードです。コンテキストオブジェクトに複数のレコード(LINQの場合はオブジェクトと思われる)を追加し、DBに送信することになっています。問題は、複数のレコードが挿入された時点で、1つのレコードだけがDBに現在作成されていることです。LINQはすべてのレコードをキューに挿入しません(レコードの上書きが可能です)

using (DeviceExerciseDataDataContext context = new DeviceExerciseDataDataContext()) 
{ 
    foreach(UpdateData tgudData in data.UpdateData) 
    { 
     tgd.FK = 1; 
     tgd.Time = tgudData.TimeStamp; 
     tgd.Calories = Convert.ToInt32(tgudData.Calories); 
     tgd.HeartRate = tgudData.AvgHr; 
     tgd.BenchAngle = tgudData.Angle; 
     tgd.WorkoutTarget = 0; 
     tgd.Reps = tgudData.Reps; 
     context.Datas.InsertOnSubmit(tgd); 
    } 
    context.SubmitChanges(); 
} 

今、私は、foreachのブロックにcontext.SubmitChanges()を入れてみましたが、これはそれが与えたエラーです。

IDENTITY_INSERTがOFFに 設定されている場合は、テーブルに 「テーブル名」を ID列の明示的な値を挿入することはできません。

私はプライマリキー列には挿入されておらず、PK列は自動インクリメントに設定されており、IDです。

なぜ私のコードは複数のレコードを挿入していないのですか?

答えて

3

tgdには1つのクラスインスタンスしか使用されないため、1つのレコードしか作成されません。既存のtgdインスタンスのプロパティを繰り返し上書きするだけです。代わりに、tgdをループ内に新規作成する必要があります。

foreach(UpdateData tgudData in data.UpdateData) 
{ 
    tgd = new WhateverTgdIs(); 
    tgd.FK = 1; 
    tgd.Time = tgudData.TimeStamp; 
    tgd.Calories = Convert.ToInt32(tgudData.Calories); 
    tgd.HeartRate = tgudData.AvgHr; 
    tgd.BenchAngle = tgudData.Angle; 
    tgd.WorkoutTarget = 0; 
    tgd.Reps = tgudData.Reps; 
    context.Datas.InsertOnSubmit(tgd); 
} 
+0

@BrokenGlassありがとうございます!しかし、今では、「既に使用されているキーを持つエンティティを追加できません」というエラーが表示されます。何か案は? 1つのレコードも挿入されていません。 – Kukoy

+0

@abatishchev、私はPKをAutoGenerate = True、Auto-Sync = OnInsertに設定しましたが、まだ使用しているキーを持つエンティティを追加できません。 ? – Kukoy

+0

@Fritos FKフィールドに一意制約が存在する可能性はありますか? – msarchet

関連する問題