0

所以我有这段代码,逻辑上应该可以工作,但实体框架的行为出乎意料。

这里:

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。我需要调用别的东西来同步它吗?

4

1 回答 1

0

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

public Supplier Add(Supplier supplier)
{
    try
    {
        _ctx.AddToSupplier(supplier);
        _ctx.SaveChanges();
         return supplier;
    }
    catch (Exception ex)
    {
        _ctx.Supplier.Detach(supplier);
        throw;
    }
}
于 2012-11-21T17:29:54.513 回答