实体框架 - 添加记录后更改字段值?

时间:2013-10-20 05:52:51

标签: entity-framework savechanges

我有一个Customer表,我正在通过Entity Framework插入记录。该表有一个整数主键(custid)。在将Customer记录添加到上下文之前,我正在查询数据库以获取最后一个密钥,然后将custid设置为高于该值。

然而,在查询和将新记录保存到数据库之间,有可能另一个客户端将存储具有该custid的记录,因此当我调用SaveChanges()时,由于现在的情况,我将得到一个异常重复值。

我的计划是将SaveChanges()调用放在try {}块中,捕获异常,然后将saleid增加一个,然后重试。

我不确定如何更改custid的值,因为它已被添加到上下文中。我的代码是这样的:

CUSTOMER myCustomer = new CUSTOMER();
myCustomer.FirstName = "John";
myCustomer.LastName = "Smith";
myCustomer.Custid = GetLastCustid() + 1;

myContext.CUSTOMERS.Add(myCustomer);

bool SavedOK = false;
while (!SavedOK)
{
    try 
    {
        myContext.SaveChanges();
        SavedOK = true;
    }
    catch (DBUpdateException e)
    {
        if (IsCustidConflict(e))
        {
            // Increment Custid by one 
            // How do I do that?????
            continue;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

DbUpdateException类包含Entries属性,您可以从中提取未能保留的条目集合:

catch (DBUpdateException e)
    {
        if (IsCustidConflict(e))
        {
            foreach (var entry in e.Entries)
            {
                  if (entry.Entity is CUSTOMER)
                  {
                        var customer = entry.Entity as CUSTOMER;
                        customer.Custid++;
                  }
            }

            continue;
        }
    }

作为旁注,我猜你有充分的理由不让数据库为你生成主键。