- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个表,我想在其中一次更新 100 行。我有一个用于查找特定行的 100 个 ID 的列表。找到后,我会为每一行更新一个列 (SyncOk)。
问题是更新 100 行需要大约 23 到 30 秒。
dbContext.Configuration.ValidateOnSaveEnabled = false;
var count = ids.Count;
for (var i = 0; i < count; i++)
{
var id = ids[i];
var record = await dbContext.History
.FirstOrDefaultAsync(r => r.Id == id);
record.SyncOk = syncOk;
}
await dbContext.SaveChangesAsync();
一些注意事项:
ids
是一个 IList<long>
包含所有感兴趣的 ID。syncOk
是一个 bool 值。AutoDetectChangesEnabled
属性设置为 false,然后在设置 SyncOk
后手动更新记录值(value) - 不会加快速度。为什么是SaveChangesAsync()
太慢了 - 我怎样才能提高上述功能的速度?我担心表在 23-30 秒内被锁定并且会使其他服务(使用同一个表)无法访问也更新一下。
最佳答案
您正在对数据库执行总共 ids.Count
个 SELECT 语句。如果您添加代码,可以看到这一点:
dbContext.Database.Log += Console.WriteLine;
尝试通过一次获取所有数据来最小化对 SQL 实例的访问:
var records = await dbContext.History.Where(i => ids.Contains(i.Id)).ToListAsync();
然后你应该执行你需要的修改:
foreach(var record in records)
{
record.SyncOk = syncOk;
}
await dbContext.SaveChangesAsync();
您也可以使用 ForEachAsync
,它会像上面的代码部分一样只查询一次结果:
await dbContext.History.Where(i => ids.Contains(i.Id))
.ForEachAsync(i => i.SyncOk = syncOk);
await dbContext.SaveChangesAsync();
关于c# - EF SaveChangesAsync 极慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34948445/
有谁知道如何覆盖 SaveChangesAsync?我知道有人发布了类似的问题,但没有答案。我在下面有以下代码: public override async Task SaveChangesAsync
这是我的表:统计 Id,Depth,RefreshCounter 示例记录: Id Depth RefreshCounter 1 1 1 2 1
在 Visual Studio 2013 中使用异步操作和 Entity Framework 支持构建新的 ApiController 时,一些方法包装 DbContext.SaveChangesAs
我想以事务方式将更改保存到数据库中的实体 Person 列表。我已经实现了该功能,但我不知道是否必须将 await Task.WhenAll(tasks); 包装在 TransactionScope
考虑以下 WebAPI 方法: [HttpPost] public async Task CreateWorkItem(Item wi) { var item = await d
我有一个表,我想在其中一次更新 100 行。我有一个用于查找特定行的 100 个 ID 的列表。找到后,我会为每一行更新一个列 (SyncOk)。 问题是更新 100 行需要大约 23 到 30 秒。
我的一个查询遇到了一个奇怪的问题。当我第一次执行它时,它起作用了,但所有后续调用都失败了 Cannot insert explicit value for identity column in tab
我想我可能在理解它应该如何工作时遗漏了一些东西。我有一些导入文件的代码。它遍历每条记录,进行一些处理,然后通过DbContext将该记录添加到表中。实例。 我初始化 DbContext像这样: pro
我正在查看一个 ASP.NET MVC 应用程序,并且有代码调用 SaveChangesAsync() 以在实体更新时保存对数据库的更改,但调用函数中的下一个语句是返回语句。根据我的理解,调用 Sav
我正在向 RavenDB 数据库中插入大量数据;大约 2500000 条记录。这需要尽可能在更短的时间内完成。 我使用一个列表来保存 SaveChangesAsync 返回的任务对象: session
发票类别实体: public class InvoiceCategory { [Key] Public int InvoiceCategoryID { get; set; }
Mock dbContext; [TestFixtureSetUp] public void SetupDbContext() { dbContext = new Mock(); db
我的应用程序中有这个功能。如果 Phrase 的插入失败,那么有人可以告诉我是否仍然添加了 Audit 条目吗?如果是这种情况,那么有没有一种方法可以将这些打包成一个可以回滚的事务。 此外,如果它失败
我正在实现审计表并覆盖 savechangesasync,但我需要检索用户标识,但我无法访问上下文类中的 HttpContextAccessor,因为它在解决方案的另一个项目中,我想将其作为savec
我正在实现审计表并覆盖 savechangesasync,但我需要检索用户标识,但我无法访问上下文类中的 HttpContextAccessor,因为它在解决方案的另一个项目中,我想将其作为savec
我的场景是这样的 //a lot of database dependant processing db.SaveChangesAsync(); //asynchronouly saving data
我正在尝试在 ASP.NET Core 应用程序中使用 Entity Framework Core Identity 我已经创建了 Database Context 及其接口(interface),如
我们遇到了 Entity Framework 的一个奇怪问题。我们正在尝试向数据库中添加一个新对象,并且是从几个不同的位置进行的。两者都使用通过 nuget 包加载的以下代码: public asyn
需要一个集中的解决方案来获取持久保存到 Db 的结果 Entity,可能在 SaveChangesAsync() 和 SaveChanges() 方法中我的 DbContext 或通过事件监听器。 需
private async void button4_Click(object sender, EventArgs e) { try {
我是一名优秀的程序员,十分优秀!