0

我有一个 Customer 表,我通过 Entity Framework 将记录插入其中。该表有一个整数主键 (custid)。在将客户记录添加到上下文之前,我正在查询数据库以获取使用的最后一个键,然后将 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;
        }
    }
}
4

1 回答 1

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;
        }
    }

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

于 2013-10-20T07:56:02.417 回答