需要确定哪些记录抛出DBConcurrencyException

时间:2017-10-20 00:33:40

标签: asp.net-mvc entity-framework

所有

我正在尝试将多个记录保存回数据库,并希望使用乐观并发(数据库获胜)。在我的模型中,我有

=IF(B1="","",IF(N(B1),IF(ROW(A2)-ROW($A$1)-1<SECOND(MAX($A$2:$A$7)-MIN($A$2:$A$7))+1,B1+TIME(0,0,1),""),A2))

在我看来,用户可以一次更新多个记录,然后传递给我的控制器。

添加和修改数据没有问题,但我看到的涉及DBConcurrencyException的每个示例都假定一次只更新一条记录。因此,有没有办法让我确定特定记录是否存在DBConcurrencyException,同时让其余记录通过(没有多次访问数据库)?

public class MySampleTable
{
    [Key]
    public int ID { get; set; }
    public string SomeValue { get; set; }
    [Timestamp]
    public byte[] RowVersion{ get; set; }
}

1 个答案:

答案 0 :(得分:0)

尝试捕获DbUpdateConcurrencyExcelption,而不是使用DbConcurrencyException。这将公开异常的Entries属性,该属性具有属于异常的所有条目。

try
{
    db.SaveChanges();
}
catch (DbUpdateConcurrencyException ex)
{
    //do something with ex.Entries poperty
}

也适用于异步:

try
{
    await _db.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException ex)
{
    //do something with ex.Entries poperty
}