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