Search code examples
c#entity-frameworklinqbulkupdateentity-framework-extended

How to Bulk Update records in Entity Framework?


I am trying to bulk update records using Entity Framework. I have tried Entity Framework.Extensions Update method.

The Update method is able to bulk update for a set of records with same set of update values.

Example:

           Id -  Quantity
Record 1 - A  -  10
Record 2 - B  -  20
Record 3 - C  -  30

We can bulk update all the above records by simple calling

Records.Update(new => Record { Quantity = 100 });

How can I bulk update each record with different quantity using Entityframework.Extensions or in any other approach, which completes the bulk update faster?


Solution

  • If you don't want to use an SQL statement, you can use the Attach method in order to update an entity without having to load it first.

    With EF5 :

    using (myDbEntities db = new myDbEntities())
    {
        try
        {
          //disable detection of changes to improve performance
          db.Configuration.AutoDetectChangesEnabled = false;
    
          //for all the entities to update...
          MyObjectEntity entityToUpdate = new MyObjectEntity() {Id=123, Quantity=100};
          db.Entry(entityToUpdate).Property(x => x.Quantity).IsModified = true;
          db.MyObjectEntity.Attach(entityToUpdate);
        
          //then perform the update
          db.SaveChanges();
        }
        finally
        {
          //re-enable detection of changes
          db.Configuration.AutoDetectChangesEnabled = true;
        }
    }
    

    With EF9 :

    using (myDbEntities db = new myDbEntities())
    {
        try
        {
          //disable detection of changes to improve performance
          db.ChangeTracker.AutoDetectChangesEnabled = false;
    
          //for all the entities to update...
          MyObjectEntity entityToUpdate = new MyObjectEntity() {Id=123, Quantity=100};
          db.Entry(entityToUpdate).Property(x => x.Quantity).IsModified = true;
          db.MyObjectEntity.Attach(entityToUpdate);
        
          //then perform the update
          db.SaveChanges();
        }
        finally
        {
          //re-enable detection of changes
          db.ChangeTracker.AutoDetectChangesEnabled = true;
        }
    }