CRUD Operations using ADO.net Entity Framework

Goldytech
Posted by in ADO.NET category on for Intermediate level | Views : 30886 red flag

In this post I show you how to perform CRUD operations using ADO.net Entity Framework. A sample WPF application is available for download which shows this functionality
INTRODUCTION
I had earlier blogged about LINQ as how it has changed the face of querying the data. Microsoft has added one more jewel in their Data Access Technology , called as ADO .net Entity Framework. ADO.NET Entity Framework abstracts the relational (logical) schema of the data that is stored in a database and presents its conceptual schema to the application. For example, in the database, entries about a customer and their information can be stored in the Customers table, their orders in the Orders table and their contact information in yet another Contacts table. For an application to deal with this database, it has to know which information is in which table, i.e., the relational schema of the data is hardcoded into the application. The disadvantage of this approach is that if this schema is changed the application is not shielded from the change. Also, the application has to perform SQL joins to traverse the relationships of the data elements in order to find related data. For example, to find the orders of a certain customer, the customer needs to be selected from the Customers table, the Customers table needs to be joined with the Orders table, and the joined tables need to be queried for the orders that are linked to the customer. The mapping of the logical schema into the physical schema that defines how the data is structured and stored on the disk is the job of the database system and client side data access mechanisms are shielded from it as the database exposes the data in the way specified by its logical schema.This technology does the same by eliminating the impedance mismatch between data models and programming languages.The logical schema and its mapping with the physical schema is represented as an Entity Data Model (EDM).The Entity data model (EDM) specifies the conceptual model of the data via the Entity-Relationship data model, which deals primarily with Entities and the Relationships they participate in. In addition, the mapping of the elements of the conceptual schema to the logical schema is also needed to be specified. The EDM schema is expressed in the Schema Definition Language (SDL), which is an application of XML. The mapping specification is also expressed in XML. ADO.NET also provides Entity Designer, for visual creation of the EDM and the mapping specification. The output of the tool is the XML file specifying the schema and the mapping. Visual Studio generates this file by the extension of .edmx

 

Crud Functionality
Whenever a new Data Access Technology is introduced , all developers ask the first question, How can I perform CRUD (Create , Retrieve , Update and Delete) operations with technology. If same question is right now going in your mind, then welcome to this post.I will show you the complete example and working WPF application , source code attached with this post. In this example I have super simple and classical Employee table in my database. To generate the .edmx file based on this table , follow this simple steps
  • Right click your project name in Visual Studio 2008 and select Add / New Item from the context menu
  • From Data Categories in left pane select ADO.net Entity Model as shown in the figure
  • Give the valid name to your file
  • Follow simple wizard steps and viola , you are done.
  • Visual Studio has created new Entity Data Model file for you.

Adding new edmx file in visual studio 2008

Please note that you can only add the edmx file in Visual Studio provided you have installed .net Framework 3.5 SP1 along with Visual Studio 2008 with SP1

Now let us dive into some code as how you can perform these operations

CREATE

Private Sub CreateEmployee(ByVal Emp As Employee)

Dim key As EntityKey = Nothing 
   Try 
      Db.AddObject("Employee", Emp) 
      Db.SaveChanges() 
      key = Db.CreateEntityKey("Employee", Emp) 
    Catch ex As Exception 
       MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK) 
    Finally 
       MessageBox.Show(String.Format("New Employee Created with Employee Id _{0}",       key.EntityKeyValues   (0).Value), "Employee Created", MessageBoxButton.OK) 
    End Try
End Sub


The above code will create a new employee record in Employee table. It accepts the parameter Emp , which is the Employee entity , based in edmx file. Visual Studio automatically generates this Partial class. Then we declare the EntityKey object , which will be used to get the Employee Id column value , which is an Identity Column in the table. The Db object variable is of Entities Type. The AddObject method add the new entity of Employee type in the logical schema, but still the changes are not committed in the database until the SaveChanges method is not executed. To get the identity column value of the last record inserted we used CreateEntityKey method which retrives the array of Entity keys and with their corresponding values.

RETRIEVE

Dim ObjList

Using db As New EFDemoEntities ObjList = (From Emp In db.Employee _ Select Emp).ToList

End Using

The Retrieve code is self explanatory which is Linq To Entities Queries which select all the columns from the Employee Entity

UPDATE

Private Sub UpdateEmployee(ByVal Emp As Employee 
   Dim key As EntityKey key = Nothing 
   Dim OrignialEmplyee As Object OrignialEmplyee = Nothing 
   Try 
      key = Db.CreateEntityKey("Employee", Emp) 
      If Db.TryGetObjectByKey(key, OrignialEmplyee) Then 
         Db.ApplyPropertyChanges(key.EntitySetName, Emp) 
         Db.SaveChanges() 
      End If

   Catch ex As Exception    

   MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK) 
   Finally 
      MessageBox.Show("Updated") 
   End Try
End Sub

In the UpdateEmployee method again we accept the Emp parameter which is of Employee Entity Type. We try to retrieve the orignal Employee entity object using TryGetObjectByKey method and passes that retrieved object by reference to the OrigninalEmployee variable. Further then by calling ApplyPropertyChanges method , we overwrite the properties of original object with the updated object's properties. SaveChanges method then commits these changes to the underlying database.

DELETE


Private Sub DeleteEmployee(ByVal Emp As Employee) 
   Try 
      Db.DeleteObject(Emp)
      Db.SaveChanges()
   Catch ex As Exception 
         MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK) 
   Finally

      MessageBox.Show("Deleted")
   End Try
End Sub

This method executes the DeleteObject method with Employee entity as its paramater. The SaveChanges method commits those changes to the database.

CONCLUSION
The Entity objects are front end interface to EDM Types which enables Object Oriented Programming to use them and access the data from the database in object fashioned rather than in releational way.This technology holds lots of promise as new Data Services (Astoria) , is also based on Entity Framework. Download the code from here. Please rename the file extension from .doc to .rar. The zip file also have the Db.rar file in the Database folder. Attach this file to your SQL Server Database and change the connection string in the app.config file to suit to your development needs. I hope you would have enjoy reading this post. Do let me know your thoughts on it. Happy coding. Follow me on twitter
Page copy protected against web site content infringement by Copyscape

About the Author

Goldytech
Full Name: Muhammad Afzal Qureshi
Member Level: Bronze
Member Status: Member
Member Since: 8/4/2009 10:58:17 PM
Country: India

http://goldytech.wordpress.com
Hello Everyone Myself Muhammad Afzal , aka GoldyTech. Thats my pen name. I reside in India and work as a solution Architect on .NET platform. I hope you must have enjoyed reading my blog. Please leave your comments or suggestions good or bad and help me to improve

Login to vote for this post.

Comments or Responses

Login to post response

Comment using Facebook(Author doesn't get notification)