在数据库中设置所有标志的快速方法
本文关键字:方法 标志 数据库 设置 | 更新日期: 2023-09-27 18:12:21
我正在寻找一种快速的方法来设置表中的所有标志,所以我尝试了这个:
using (var db = new PlaceDBContext())
{
Parallel.ForEach(db.Companies.Where(x => x.CheckedCompaniesHouse == true).ToList(),async (c) =>
{
c.CheckedCompaniesHouse = false;
await db.SaveChangesAsync();
});
}
但是这不起作用,它给出了错误:
"在上一个上下文之前开始的第二个操作异步操作完成。使用'await'来确保任何异步操作在调用另一个方法之前已经完成在这方面。不保证任何实例成员都是线程安全的。"
我很确定我以前做过类似的事情,它工作得很好。这种方法可行吗?
有更好的方法吗?
实现目标的最佳方法之一是使用实体框架扩展库:
db.Companies
.Where(x => x.CheckedCompaniesHouse == true)
.Update(t => new Company { CheckedCompaniesHouse = false });
使用此库可以避免将要修改的实体加载到内存中。我上面展示的代码将被转换为sql更新批处理。
你试过吗?
db.YourTable.Where(x => x.TheId == TheParameterId && x.AnotherColumn == true).ToList().ForEach(x =>
{
x.IsActive = false; x.UpdatedTimeStamp = DateTime.Now;
});
db.SaveChanges();
我不知道是否有一个简单的方法来做到这一点,没有扩展和其他库。
但是EF不是很擅长这样的多次更新,你为什么不在Dapper上尝试一下呢?
也有async方法
你可以用简单的ADO来做。. NET和SQL.
类似:
connection.Execute("UPDATE Table SET Field = NewValue WHERE Column = @Parameter", new { Parameter = someParameterValue });
https://github.com/StackExchange/dapper-dot-net