Add, Update and Delete Objects in Entity Framework 4.0

Posted by: Suprotim Agarwal , on 12/11/2010, in Category Entity Framework
Views: 343326
Abstract: In this article, we will see how to Add, Update and Delete objects in our conceptual Entity model and push the changes to the underlying database.

In a previous article, we saw how to Create an Entity Framework Model and Use it in Multiple Projects. In this article, we will see how to Add, Update and Delete objects in our conceptual model and push the changes to the underlying database.

We will be using the same console application that we created in the previous article, so make sure you have read the previous article before we continue. We will be adding three methods to the console application: addCustomer(), deleteCustomer() and modifyCustomer()

Create and Add Objects in Entity Framework 4.0

In order to add new objects to the Entity Set, you must create an instance of an Entity type and add the object to the object context. Objects attached to the object context are managed by that object context. Now there are three ways to add a new object to the object context:

1. Use ObjectSet<TEntity>.AddObject()
2. Use ObjectContext.AddObject()
3. Use EntityCollection<TEntity>.Add()

We will be using the first method i.e. ObjectSet<TEntity>.AddObject(). Observe the code shown below:

EF4 Add Entity

All we are doing here is create a new instance of the Customer type and populate its properties. We then add this instance to the Customers set using the EntitySet<T>.AddObject method. The AddObject() method is used for adding newly created objects that do not exist in the database. When AddObject() is called, a temporary EntityKey is generated and the EntityState is set to 'Added', as shown below: 

Entity State Added 

When context.SaveChanges() is called, EF 4.0 goes ahead and inserts the record into the database. Note that Entity Framework converts our code into queries that the database understand and handles all data interaction and low-level details. Also notice in the code above, that we are accessing data as objects and properties.

After you have executed the code, you can go ahead and physically verify the record in the database. If the query executed successfully, you should see a new record in the Customers table of the Northwind database, as shown below: 

Entity Added In DB 

Update Objects in Entity Framework 4.0

As I mentioned earlier, objects attached to the object context are managed by that object context. The steps to update an existing entity are quite simple. First retrieve an instance of the entity from the EntitySet<T> (in our case ObjectSet<Customer>), then edit the properties of the Entity and finally call SaveChanges() on the context.

EF4 Update Entity

In the code shown above, we are modifying the newly inserted record (‘ID=DNC’) we created in the previous step and then add the ‘CEO’ value for the ContactTitle column. When EF converts your code to a SQL query, it automatically uses parameters to avoid SQL injection attacks.

Execute the code and go ahead and check the record in the database: 

Entity Update In DB 

Delete Objects in Entity Framework 4.0

To delete an existing record, retrieve an instance of the entity from the EntitySet<T> (in our case ObjectSet<Customer>), then call the ObjectSet<TEntity>.DeleteObject() . When the DeleteObject() method is called, the EntityState of the object is set to ‘Deleted’ 

Entity State Deleted 

Finally call SaveChanges() on the context to delete the data from the data source. Another way to delete an object is to use the ObjectContext.DeleteObject() but we have used the ObjectSet.DeleteObject for our example 

EF4 Delete Entity 

Go ahead and check the database and you will find that the CustomerID=DNC no more exists.

Well this was an overview of how we can Add, Delete and Update Objects in Entity Framework 4.0. We have not yet touched upon issues like Concurrency, ForeignKey Dependencies and Cascading Deletes, which is common while dealing with CRUD operations. I will be covering that in my future articles.

If you are interested in Entity Framework 4.0, I strongly suggest you to check out my Entity Framework 4.0 article series.

 The entire source code of this article can be downloaded over here.

Give me a +1 if you think it was a good article. Thanks!
Recommended Articles
Suprotim Agarwal, ASP.NET Architecture MVP, MCSD, MCAD, MCDBA, MCSE, is the CEO of A2Z Knowledge Visuals Pvt. He primarily works as an Architect Consultant and provides consultancy on how to design and develop .NET centric database solutions.

Suprotim is the founder and primary contributor to DotNetCurry, SQLServerCurry and DevCurry. He has also written an EBook 51 Recipes using jQuery with ASP.NET Controls.

Follow him on twitter @suprotimagarwal


Page copy protected against web site content infringement by Copyscape


User Feedback
Comment posted by Julian B on Wednesday, December 15, 2010 7:09 PM
I love your writing style suprotim. thanks i look ahead for more articles
Comment posted by nilesh on Friday, December 24, 2010 6:27 AM
I read all your articles on EF 4.0 till date. They are excellent. I am looking forward for more articles which cover concurrency, transaction, would like to know how a EDM pointing to SQL server can be easily point to Oracle.
Comment posted by John W on Wednesday, January 26, 2011 5:35 PM
Thank you so much for this excellent, to the point and for a beginner very understandable article. Been googling for quite a while to find a good example of how to perform simple updates with EF 4. Told myself i couldnt go to bed before i got this updatemethod working... and thanks to you now i can finally go to bed.Thanks again!!
Comment posted by Ivan Stefanov on Tuesday, April 26, 2011 11:19 AM
Simple and clear. Just Perfect! 10x a lot. This tutorial helped me to finish my stuff after whole day searching in internet. Have a virtual beer from me!
Comment posted by yogendra on Tuesday, September 13, 2011 12:34 PM
At the time of submitchanges on add new record, getting unhandled exception and validation, i under stand there some mismatch in datatype of column buts how i can debug it or how get the final sql statment
Comment posted by yogendra on Tuesday, September 13, 2011 1:15 PM
At the time of submitchanges on add new record, getting unhandled exception and validation, i under stand there some mismatch in datatype of column buts how i can debug it or how get the final sql statment
Comment posted by ricardo santana on Tuesday, October 18, 2011 2:01 PM
error
"An error occurred while updating the entries. See the inner exception for details."

What can be? and How to Fix?

Thank you.
Comment posted by Mrunal Buch on Friday, January 6, 2012 3:11 AM
what about updating the object graph or Related entities ?
Comment posted by Dina on Wednesday, May 2, 2012 4:23 PM
When I deployed my code to Integration Server or even copied entire solution to Integration Server, I get error on SaveChanges:
"An error occurred while updating the entries. See the inner exception for
details"
But, I did not get such error when I test the same code locally.
What could be difference between local host and Integration Server
Comment posted by Soumen Roy on Friday, July 27, 2012 2:10 AM
Nice post. Thanks for sharing it.


http://www.prowessweb.in/services/mobile-applications-development/
Comment posted by Anjum Rizwi on Thursday, August 9, 2012 5:41 AM
Very good article.
It helped me to start using EF.

one question: How to truncate table using EF?
Comment posted by Julio Veloz on Tuesday, September 4, 2012 6:52 PM
I would like to know how to work with two or more entities at the same time and how to update when one depends from the other, e.g. the balance of an account when I register a deposit?
Comment posted by LT on Thursday, September 20, 2012 11:37 AM
I would like to know how to perform the update operation by passing in a populated Customer object that is NOT from context and assigning it's properties to the Customer object that IS in context.

So a user could update a customer form on a web page and upon posting the web form, that customer object gets carried to your update example above and saved to the context.

How do I do this?
Comment posted by Rameshkumar on Wednesday, November 28, 2012 11:58 PM
Customer
{
customerid integer,
userid integer,
DOB timestamp
}

User
{
userid integer,
username varchar(100),
password varchar(100),
firstname varchar(50),
lastname varchar(50),
email varchar(100),
isactive bit
}

For username and password are updated on new mode.

The following statement to used to update on edit mode, but i am getting exception

Customer editCustomer = DB.Customers.First(c => c.customerid == customerId);
if (editCustomer != null)
{
   User editUser = DB.Users.First(u => u.userid == editCustomer.User.userid);
   if (editUser != null)
   {
      editUser.firstname = userData.firstname;
      editUser.lastname = userData.lastname;
      editUser.email = userData.email;
      editUser.isactive = userData.isactive;
   }
   customerData.User = editUser;
   editCustomer = customerData;
   DB.SaveChanges();
}
Comment posted by nikita on Wednesday, December 19, 2012 9:48 PM
it's really very usable article. Thank you.
Comment posted by gfhfhgfhg on Saturday, March 2, 2013 4:55 AM
hffghfhfghfsdfs sdfsdf sdfsdf
Comment posted by josh on Monday, March 4, 2013 8:41 AM
great article made everything "click"!
Comment posted by Med Amine on Tuesday, March 5, 2013 5:54 PM
Great article but i was wondering if it is possible to implement crud methods using wcf services!!
if it is possible is there any good tutorials on this subject
ps: thanks again for the article it was very helpful
Comment posted by Ric P on Tuesday, March 19, 2013 9:59 AM
Nice article!
Comment posted by 56565 on Tuesday, April 30, 2013 2:25 AM
ghjghbjkghfhfg
Comment posted by fadwa on Thursday, May 2, 2013 3:17 AM
Hello, I have a problem with the function of suppression,
I have a category table and I wanted to delete a record with id of the category given parameters of the function,
but it gives me this error "An unhandled exception of type 'System.Data.UpdateException' occurred in System.Data.Entity.dll "
showing the ab.SaveChanges line ();

    public void Delete(int id)
        {
            GooglaOneErpEntities3 ab = new GooglaOneErpEntities3();
        
            var cat = ab.CategorieProduit.First(m => m.IdCategorieProduit == id);

            // Suppression
            ab.DeleteObject(cat);
            ab.SaveChanges();

        }
Comment posted by TAN TH on Thursday, June 6, 2013 3:01 AM
hi thanks for the nice article... it is good information.
I try out with, not with Console, but with WPF, Add New Item, ADO.NET Entity Data Model, then link to Northwind database, I am using EF 5.0.0.

I could not could through this code:
context.Customers.AddObject(cust);
in public static void addCustomer(NorthwindEntities context)
but can only have context.Customers.Add(cust); which is able to compile through, but enter errors when run.
Could you help me via email? tanthiamhuat@yahoo.com

I run your console application, there is no error, it is able to add new customer to the database. I believe my WPF should work too.

thanks.
Comment posted by Priyanshu on Sunday, June 16, 2013 11:47 PM
Very - 2 nice Article written by you. i really appreciate you for this work.
Comment posted by Sarasa on Tuesday, June 25, 2013 6:52 AM
InvDepartment invDepartment = new InvDepartment();
            InvDepartmentService invDepartmentService = new InvDepartmentService();
            if (existingDeparment!=null && existingDeparment.InvDepartmentID != 0)
                invDepartment = invDepartmentService.GetInvDepartmentByCode(txtDepartmentCode.Text.Trim());
            invDepartment.GroupOfCompanyID = 102;
            invDepartment.DepartmentCode = txtDepartmentCode.Text.Trim();
            invDepartment.DepartmentName = txtDepartmentDescription.Text.Trim();
            invDepartment.Remark = txtRemarks.Text.Trim();

            if (invDepartment.InvDepartmentID==0)
            {
                invDepartmentService.AddinvDepartment(invDepartment);
            }
            else
            {
                invDepartmentService.UpdateInvDepartment(invDepartment);
            }
Comment posted by rakesh on Tuesday, July 16, 2013 3:33 AM
context.SaveChanges() not work how to use it
error update/insert function not define
please reply
Comment posted by Anup on Wednesday, December 11, 2013 2:13 AM
Thanks :)
Comment posted by Meenakshi on Tuesday, January 28, 2014 7:01 AM
Good and helpful article . Thanks !
Comment posted by pranitha on Tuesday, February 25, 2014 10:28 AM
thank you very much this info was great
Comment posted by 12345 on Monday, March 24, 2014 6:15 AM
thanks

Post your comment
Name:  
E-mail: (Will not be displayed)
Comment:
Insert Cancel