所以我得到了这段代码,逻辑上应该可以正常工作,但实体框架出乎意料。
下面:
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 。我是否需要调用其他内容来同步它?
答案 0 :(得分:0)
找到它,必须在Add()方法中改变一些东西:
public Supplier Add(Supplier supplier)
{
try
{
_ctx.AddToSupplier(supplier);
_ctx.SaveChanges();
return supplier;
}
catch (Exception ex)
{
_ctx.Supplier.Detach(supplier);
throw;
}
}