c# – 为什么SaveChangesAsync实际上没有保存我的所有更改?
发布时间:2020-12-15 23:44:20 所属栏目:百科 来源:网络整理
导读:我想我可能会错过一些关于这应该如何工作的东西.我有一些导入文件的代码.它遍历每个记录,进行一些处理,然后通过DbContext实例将该记录添加到表中. 我像这样初始化DbContext: protected void ResetDbContext(){ if (_db != null) _db.Dispose(); _db = new A
我想我可能会错过一些关于这应该如何工作的东西.我有一些导入文件的代码.它遍历每个记录,进行一些处理,然后通过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()做的唯一真正的改变是添加异步Task< int>作为ProcessRecord的返回类型,更改了SaveChanges()以返回等待SaveChangesAsync()并注释掉对ResetDBContext的调用. 在异步更改之前,事情按预期工作.之后,似乎没有保存我的所有记录. 我在这里错过了什么? 解决方法
您正在调用异步方法,该方法返回任务而无需等待它完成.在转到下一条记录之前,您需要使用等待异步等待.使用“Async”后缀命名异步方法也是一个标准:
foreach (var rec in engine) { var record = new CommonImportRecord(rec); var result = await ProcessRecordAsync(record,index); index++; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |