我正在使用EF Core测试批量导入并尝试异步保存。
我尝试一次添加100个实体,然后异步保存并重复,直到它们全部保存完毕。我偶尔会遇到PK错误,因为它试图将两个具有相同id的实体添加到数据库中。没有添加的实体具有id集,id是自动生成的序列。
代码:
public async Task<bool> BulkAddAsync(IEnumerable<VehicleCatalogModel> models)
{
_dbContext.ChangeTracker.AutoDetectChangesEnabled = false;
try
{
var entities = models.Select(ToEntity);
_dbContext.Set<VehicleCatalog>().AddRange(entities);
await _dbContext.SaveChangesAsync();
}
catch (Exception ex)
{
_logger.LogError(0, ex, "An Error occurred during the import");
return false;
}
return true;
}
我在xunit测试中调用该方法,该测试生成测试数据列表并调用import
var result = manager.BulkAddAsync(modelsToAdd.AsEnumerable());
var counter = 0;
while (!result.IsCompleted && counter < 10)
{
Thread.Sleep(6000);
counter++;
}
Assert.True(result.IsCompleted && result.Result);
它应该在添加100个实体后保留执行,直到它们被保存为止,然后添加更多,但我偶尔会遇到此错误。我还需要添加其他东西才能使其正常工作吗?或者更好的批量插入方法?