按条件更新DB表中的字段而不加载

时间:2016-12-13 14:24:15

标签: c# entity-framework linq entity-framework-core

是否可以使用EF Core和LINQ执行简单的SQL UPDATE运算符? 由于类型和重构安全性,我想使用LINQ。我需要避免在应用程序和数据库驱动程序之间来回加载大量对象 基本上我需要这样的smth:

DB.Items.Update(i => i.Value = 5).Where(i => i.Flag > 5);

4 个答案:

答案 0 :(得分:1)

您可以使用轻量级EFBulk nuget package

示例代码:

var count = db.Items.Where(s => s.Title == "Game")
        .Update(o => new Item { Price = 999, Title = "Tablet" }, db);

答案 1 :(得分:0)

实体框架适用于模型,因此您无法直接更新linq查询的值。您可以做的是使用Attach()命令创建包含您想要更新的值的模型,并将它们保存到数据库

答案 2 :(得分:-1)

迄今为止找到的最佳解决方案是EntityFramework-Plus https://github.com/zzzprojects/EntityFramework-Plus

正如@Smit指出的那样,它可以在未来的EFCore中实现。 可以在此处跟踪进度https://github.com/aspnet/EntityFramework/issues/795

答案 3 :(得分:-1)

您不需要获取所有记录来更新。

只需像这样创建一个可查询的:

IQueryable<Item> items = DB.Items.Where(i => i.Flag > 5).Select(r => new Item
{
  .,
  .,
  .,
  Value = 5
});

DB.Items.UpdateRange(items);

基本上 IQueryable 是查询的数据库表示。 它应该更新这些项目而不获取那些。