We often need to update items in bulk while working with Entity Framework. As good as it is, entity framework has its quirks like any other ORM tools. Entity Framework bulk update is needed only when you need to update multiple items at a go.
We used classic ADO.NET stored procedure for our long-running processes. But when updating multiple items from models at once we found it rather a tedious process to maintain. We were already using the entity framework in our project for data access along with the classic ADO.NET. So decided to use entity framework for bulk update operations.
In this very short article, I am showing a way how we have updated our list of objects using entity framework DB first. Here we want to update some particular property of a list into our database.
ItemObject = Object model from database
list = the list of items we want to update
ContextFactory.GetContext() = A factory method to get a particular context. This is our application specific method.
1 |
using (var context = ContextFactory.GetContext())<br />{<br /><br /> foreach (var item in list)<br /> {<br /> context.ItemObjects.Attach(item);<br /> DbEntityEntry<ItemObject> entry = context.Entry(item);<br /> entry.Property(p => p.ReceivedDate).IsModified = true;<br /> entry.Property(p => p.ModifiedDate).IsModified = true;<br /> }<br /><br /> context.SaveChanges();<br />}<br /><br /> |
Here we updated just a few properties in our model. If we want entity framework to update the whole model we need to set the entity state property to modified for the whole entity.
1 |
using (var context = ContextFactory.GetContext())<br />{<br /><br /> foreach (var item in list)<br /> {<br /> context.ItemObjects.Attach(item);<br /> DbEntityEntry<ItemObject> entry = context.Entry(item);<br /> entry.State = EntityState.Modified;<br /> }<br /> context.SaveChanges();<br />}<br /><br /> |
After the loop is finished, save the context. The data will be updated in the database.
Entity framework bulk update or insert operation is slow. I’d recommend any other option if we can find to do such bulk updates. But in terms of code maintenance, we found it feasible in our case. Be sure to use it when you need this kind of operation.
I hope this helps you guys. If you have any suggestion regarding anything or how should I improve please don’t forget to knock. I’d really appreciate your feedback.