如何使用EF Core(7)批量更新实体?
我不想从DB服务器加载实体,修改属性然后更新。 我只想让EF生成适当的UPDATE语句。
如何使用EF Core(7)批量更新实体?
我不想从DB服务器加载实体,修改属性然后更新。 我只想让EF生成适当的UPDATE语句。
// using Z.EntityFramework.Plus; // Don't forget to include this.
// UPDATE all users inactive for 2 years
ctx.Users.Where(x => x.LastLoginDate < DateTime.Now.AddYears(-2))
.Update(x => new User() { IsSoftDeleted = 1 });
维基百科:Entity Framework批量更新
var updatedColumns =
await
context
.Blog
.ExecuteUpdateAsync(p => p.SetProperty(s => s.Title, s => "Wow"));
了解有关批量操作的更多信息,请参阅EF7最新内容,ExecuteUpdate和ExecuteDelete(批量更新)文档。
它已在 efcore 7 中发布。
await context.Blogs.ExecuteUpdateAsync(
s => s.SetProperty(b => b.Name, b => b.Name + " *Featured!*"));
生成适当的:
UPDATE [b]
SET [b].[Name] = [b].[Name] + N' *Featured!*'
FROM [Blogs] AS [b]
在我发布这个答案的当天,根据我所掌握的信息,看起来它是一个“正在进行中”的工作
请参见https://github.com/aspnet/EntityFramework/issues/795
EF没有提供批量更新机制。以下是一个提议。 Context.Customers.Update().Where.( c => c.CustType ==“New”).Set( x => x.CreditLimit=0)
您会考虑这个功能吗?更多细节请参见: https://entityframework.codeplex.com/workitem/52
await context.Blogs.ExecuteUpdateAsync(s =>{ s.SetProperty(b => b.Name, b => "1"); s.SetProperty(b => b.Age, b => 36); });
- Marco Medrano