使用实体框架一次更新多行

问题描述 投票:0回答:3

我想弄清楚是否有一种方法可以使用实体一次更新多行。

现在我使用 Linq2Sql SubmitChanges 它将逐行执行更新:

c.PROPERTYONE = valueOne;
c.PROPERTYTWO = valueTwo;
...
dataContext.SubmitChanges();

在我的例子中,valueOne 和 valueTwo 很可能在每次迭代中发生变化。

我想知道是否可以存储例如最多 1000 行并立即更新它们。

我知道如何通过插入来完成此操作(通过获取 DbContext 实例、适当的表、调用 Add 函数,然后调用 SaveChanges),但我正在努力寻找更新的等效项。

提前致谢!

c# entity-framework
3个回答
7
投票

您应该使用以下概念来更新多行。

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()

}

2
投票

在实体框架中,您可以使用事务。因此,您可以将所有更改分组到一个事务中。当您提交事务时,所有更改都会一起/可以一起回滚。 我从这里偷了这个例子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(); 
                    } 
                } 

0
投票

2023 年的答案,我们现在可以使用 ExecuteUpdate() 和 ExecuteDelete(),它需要 EF Core 7.0。 您不需要循环或任何先前的阅读。

https://learn.microsoft.com/en-us/ef/core/ saving/execute-insert-update-delete

© www.soinside.com 2019 - 2024. All rights reserved.