我有一个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;
}
}
}
答案 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;
}
}
作为旁注,我猜你有充分的理由不让数据库为你生成主键。