0

我在使用 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();
4

0 回答 0