所以我有这段代码,逻辑上应该可以工作,但实体框架的行为出乎意料。
这里:
foreach (SomeClass someobject in allObjects)
{
Supplier supplier = new Supplier();
supplier.primary_key = someobject.id;
supplier.name = someobject.displayname;
try
{
sm.Add(supplier);
ro.Created++;
}
catch (Exception ex)
{
ro.Error++;
}
}
这是我在 sm.Add() 中的内容
public Supplier Add(Supplier supplier)
{
try
{
_ctx.AddToSupplier(supplier);
_ctx.SaveChanges();
return supplier;
}
catch (Exception ex)
{
throw;
}
}
我可以在allObjects中拥有相同 id 的记录。我的一段代码需要支持这一点,然后继续下一段并尝试插入它,我认为这应该可以工作。
如果发生这种情况,则会抛出异常,表示无法插入具有欺骗 PK 的记录(当然)。异常提到了 PK 的值,例如1000。
一切都很好,一个新的供应商被传递给sm.Add()包含一个以前从未使用过的 PK。( 1001 )
奇怪的是,在执行 SaveChanges() 时,EF 会抱怨无法插入带有欺骗 PK 的记录。即使供应商在primary_key中包含1001 ,异常仍然提到1000。
我觉得这是我没有正确使用_ctx。我需要调用别的东西来同步它吗?