gpt4 book ai didi

c# - 为什么 SaveChangesAsync 实际上没有保存我的所有更改?

转载 作者:太空狗 更新时间:2023-10-30 00:07:24 34 4
gpt4 key购买 nike

我想我可能在理解它应该如何工作时遗漏了一些东西。我有一些导入文件的代码。它遍历每条记录,进行一些处理,然后通过DbContext将该记录添加到表中。实例。

我初始化 DbContext像这样:

protected void ResetDbContext()
{
if (_db != null)
_db.Dispose();

_db = new AppDBEntities();
_db.Configuration.AutoDetectChangesEnabled = false;
_db.Configuration.ValidateOnSaveEnabled = false;
}

我的主循环看起来像这样:

foreach (var rec in engine)
{
var record = new CommonImportRecord(rec);
ProcessRecord(record, options, index);
index++;
}

_db.SaveChanges();

ProcessRecord看起来像这样:

protected async Task<int> ProcessRecord(CommonImportRecord record, ImportOptions options, int index)
{
DisplayProcessStatus(index, options);
// Code removed which fills in various properties of the record
_db.MyTable.Add(record);
if (index % options.UpdateInterval == 0)
{
return await _db.SaveChangesAsync();
// This was originally here, commented out when I changed SaveChanges() to SaveChangesAsync()
// ResetDBContext();
}
}

我为 SaveChangesAsync() 所做的唯一真正的改变是添加async Task<int>作为 ProcessRecord 的返回类型, 改变了 SaveChanges()return await SaveChangesAsync()并注释掉对 ResetDBContext. 的调用

在异步更改之前,一切都按预期工作。之后,似乎并没有保存我所有的记录。

我在这里错过了什么?

最佳答案

您正在调用一个 async 方法,该方法返回一个任务而不等待它完成。在继续下一条记录之前,您需要使用 await异步等待。使用“Async”后缀命名您的 async 方法也是一种标准:

foreach (var rec in engine)
{
var record = new CommonImportRecord(rec);
var result = await ProcessRecordAsync(record, options, index);
index++;
}

关于c# - 为什么 SaveChangesAsync 实际上没有保存我的所有更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25997136/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com