Entity framework update one column by increasing the current value by one without select

喜欢而已 提交于 2019-12-04 03:14:47

With pure EF, you are right: you have to load the entities one by one, set the property, and save. Very inefficient.

The 2 alternatives that I know of are:

  1. Provide raw SQL to execute the UPDATE statement as you want it.
  2. Use the EntityFramework.Extended library (https://github.com/loresoft/EntityFramework.Extended), which supports both bulk UPDATEs and DELETEs with a natural EF feel.

Quote from their main page:

Batch Update and Delete

A current limitations of the Entity Framework is that in order to update or delete an entity you have to first retrieve it into memory. Now in most scenarios this is just fine. There are however some senerios where performance would suffer. Also, for single deletes, the object must be retrieved before it can be deleted requiring two calls to the database. Batch update and delete eliminates the need to retrieve and load an entity before modifying it.

Deleting

//delete all users where FirstName matches
context.Users.Where(u => u.FirstName == "firstname").Delete();

Update

//update all tasks with status of 1 to status of 2
context.Tasks.Update(
    t => t.StatusId == 1, 
    t2 => new Task {StatusId = 2});

//example of using an IQueryable as the filter for the update
var users = context.Users.Where(u => u.FirstName == "firstname");
context.Users.Update(users, u => new User {FirstName = "newfirstname"});

Here is the solution. You can use the following code:

context.Table.Where(x => x.Field1 > 0).Update(y => new Table { Field2 = y.Field2 + 1 });

hope that it helps.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!