我想弄清楚是否有一种方法可以使用实体一次更新多行。
现在我使用 Linq2Sql SubmitChanges 它将逐行执行更新:
c.PROPERTYONE = valueOne;
c.PROPERTYTWO = valueTwo;
...
dataContext.SubmitChanges();
在我的例子中,valueOne 和 valueTwo 很可能在每次迭代中发生变化。
我想知道是否可以存储例如最多 1000 行并立即更新它们。
我知道如何通过插入来完成此操作(通过获取 DbContext 实例、适当的表、调用 Add 函数,然后调用 SaveChanges),但我正在努力寻找更新的等效项。
提前致谢!
您应该使用以下概念来更新多行。
using (var db = new MyDbContext())
{
var myData=db.YourTableObject.Where(x=>x.Someproperty=="Something").ToList();
myData.ForEach(m => m.YouPropertye= "Set Your Value",m.SomeOther="Set Other");
db.SaveChanges()
}
在实体框架中,您可以使用事务。因此,您可以将所有更改分组到一个事务中。当您提交事务时,所有更改都会一起/可以一起回滚。 我从这里偷了这个例子https://msdn.microsoft.com/en-us/library/dn456843(v=vs.113).aspx
using (var dbContextTransaction = context.Database.BeginTransaction())
{
try
{
context.Database.ExecuteSqlCommand(
@"UPDATE Blogs SET Rating = 5" +
" WHERE Name LIKE '%Entity Framework%'"
);
var query = context.Posts.Where(p => p.Blog.Rating >= 5);
foreach (var post in query)
{
post.Title += "[Cool Blog]";
}
context.SaveChanges();
dbContextTransaction.Commit();
}
catch (Exception)
{
dbContextTransaction.Rollback();
}
}
2023 年的答案,我们现在可以使用 ExecuteUpdate() 和 ExecuteDelete(),它需要 EF Core 7.0。 您不需要循环或任何先前的阅读。
https://learn.microsoft.com/en-us/ef/core/ saving/execute-insert-update-delete