添加多个对象时保存更改时的主键异常

时间:2013-04-08 15:12:06

标签: c# linq entity-framework

我有一个实体对象类型的对象列表 我正在使用ms sql server 2008

我写了一个类似的代码:

foreach (some_entity_obj obj_to_handle in this.some_entity_obj_list)
{
  try
  {
    db.some_entity_obj.AddObject(obj_to_handle);

    if (dbsaveCounter % 10 == 0)
    {
        db.SaveChanges();

        this.monitor.SyncValues(some_monitoring_unit, another_monitoring_unit);
        some_monitoring_unit = 0;
        another_monitoring_unit = 0;

    }
    if (obj_to_handle.some_monitoring_unit != null)
        some_monitoring_unit += (double)obj_to_handle.some_monitoring_unit;
    if (obj_to_handle.another_monitoring_unit != null)
        another_monitoring_unit += (double)obj_to_handle.another_monitoring_unit;

    dbsaveCounter++;
  }
  catch (Exception ex)
  {
    this.monitor.PushToUnsecceeded_rows(obj_to_handle,ex);
    this.monitor.PushToErrors("Error in ** : ", ex, false);
  }
}
db.SaveChanges();
this.monitor.SyncValues(some_monitoring_unit, another_monitoring_unit);

我收到以下异常: 无法确定“实体对象”关系的主要结尾。多个添加的实体可能具有相同的主键。

如果我保存每次循环运行的更改,那么

以下是我的问题的简短版本:

为什么会这样:

foreach (foo _entObj in someList)
{
   db.foo.AddObject(_entObj);
   db.SaveChanges();
}

这不起作用:

 int cnt = 0;
    foreach (foo _entObj in someList)
    {
       db.foo.AddObject(_entObj);
       if (cnt%10 == 0)
          db.SaveChanges();
       cnt++;
    }
    db.SaveChanges();

0 个答案:

没有答案