处理重复插入

时间:2012-11-21 16:57:24

标签: c# linq entity-framework-4.1

所以我得到了这段代码,逻辑上应该可以正常工作,但实体框架出乎意料。

下面:

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 。我是否需要调用其他内容来同步它?

1 个答案:

答案 0 :(得分:0)

找到它,必须在Add()方法中改变一些东西:

public Supplier Add(Supplier supplier)
{
    try
    {
        _ctx.AddToSupplier(supplier);
        _ctx.SaveChanges();
         return supplier;
    }
    catch (Exception ex)
    {
        _ctx.Supplier.Detach(supplier);
        throw;
    }
}