使用更新范围方法时处理并发异常



首先,我从数据库(Sql Server(获得项目跟踪列表。 我有一个使用并发检查更新项目列表的方案。 数据库中的每一行都有 rowversion 列,并使用流畅的 api IsRowversion(( 方法进行配置。

在编辑列表中每个项目的一些属性后,使用断点我手动更改 sql Server 中每一行的一列以引发异常。 但是,即使有多个记录更改,异常也始终只有一个条目。 (电子核心 2.1(

public async Task UpdateWithConcurrency<T>(List<T> items, CancellationToken ct) where T : class, new()
{
foreach (var item in items)
item.GetType().GetProperty("DateModified").SetValue(item, DateTime.Now);
List<T> databaseEntries = new List<T>();
_context.UpdateRange(items);
try
{
await _context.SaveChangesAsync(ct);
}
catch (DbUpdateConcurrencyException ex)
{
var errors = ex.Entries; // ==> The count is always one even 
// even with changes in each row
foreach (var errorEntry in errors)
{
var databaseItem = await errorEntry.GetDatabaseValuesAsync();
databaseEntries.Add(databaseItem.ToObject() as T);
}
}
}
即使

有多个记录更改,异常也始终只有一个条目。(电子核心 2.1(

SaveChanges(( 在事务中运行,但一次应用一个更改。 EF 不会在第一个并发错误后继续尝试保存更改。

最新更新