LINQ不会在que中插入所有记录(可能覆盖记录?)

时间:2011-06-24 13:40:23

标签: c# .net linq exception-handling

这是我的以下代码(以前的代码)。它应该在上下文对象中添加多个记录(我猜LINQ情况下的对象),然后提交给DB。问题是,现在只有一条记录正在向DB发送,当时有几条用于插入。

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();
}

现在,我尝试将context.SubmitChanges()放入foreach块,这就是它给出的错误。

  

无法插入显式值   表中的标识列   IDENTITY_INSERT是'tablename'   设置为OFF。

请注意,我没有插入主键列,PK列设置为自动增量,并且是标识。

对我来说,为什么我的代码不再插入多个记录了?

1 个答案:

答案 0 :(得分:3)

您只为tgd使用单个类实例,因此只创建了一条记录 - 您只是重复覆盖现有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);
}
相关问题