EF Core和Saving Async

时间:2017-05-26 18:29:10

标签: c# entity-framework asynchronous .net-core

我正在使用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个实体后保留执行,直到它们被保存为止,然后添加更多,但我偶尔会遇到此错误。我还需要添加其他东西才能使其正常工作吗?或者更好的批量插入方法?

0 个答案:

没有答案