learning mvcpart 3 creating mvc application amp perform crud operations using entityframework

15
csharppulse.blogspot.in http://csharppulse.blogspot.in/2013/08/learning-mvc-part-3-creating-mvc.html Learning MVC-Part 3 : Creating MVC Application & Perform CRUD Operations Using EntityFramework Download Complete Source Code Introduction: In our first and second attempt to learn MVC, we learnt, what is MVC?, what is separation of concerns?, how to create a simple MVC application and perf orm CRUD operations on the application using LINQ to SQL. My this article f ocuses on how to perf orm CRUD operations in MVC application by the use of an ORM(Entity Framework). The article is an attempt to overcome the conf usion related to how to use EntityFramework with MVC application in a very simple way. Our Roadmap: Our roadmap remains same, 1. Part1: Introduction to MVCarchitecture and Separation of Concerns. 2. Part 2: Creating MVC Application f romscratch and connecting it with database using LINQ to SQL. 3. Part 3: Connecting the MVC Application with the help of EntityFramework DB-First approach. 4. Part 4: Connecting the MVC Application with the help of EntityFramework Code-First approach. 5. Part 5: Implementing Repository Pattern in MVC Application with EntityFramework. 6. Part 6: Implementing a generic Repository Pattern and Unit Of Work pattern in MVC Application with EntityFramework. Pre-requisites: There are f ew pre-requisites bef ore we start with the article, We have running sample application that we created in second part of the article series. We have EntityFramework 4.1 package or dll on our local f ile system. We understand how MVC application is created. What is ORM and EntityFramework?

Upload: joao-pimentel

Post on 27-Nov-2015

25 views

Category:

Documents


3 download

DESCRIPTION

learning MVCPart 3 Creating MVC Application Amp Perform CRUD Operations Using EntityFramework

TRANSCRIPT

Page 1: learning MVCPart 3 Creating MVC Application Amp Perform CRUD Operations Using EntityFramework

csharppulse.blo gspo t .in http://csharppulse.blogspot.in/2013/08/learning-mvc-part-3-creating-mvc.html

Learning MVC-Part 3 : Creating MVC Application & PerformCRUD Operations Using EntityFramework

Download Complete Source Code

Introduction: In our f irst and second attempt to learn MVC, we learnt, what is MVC?, what isseparation of concerns?, how to create a simple MVC application and perf orm CRUD operations on theapplication using LINQ to SQL.My this article f ocuses on how to perf orm CRUD operations in MVC application by the use of anORM(Entity Framework).The article is an attempt to overcome the conf usion related to how to use EntityFramework with MVCapplication in a very simple way.

Our Roadmap:

Our roadmap remains same,

1. Part1: Introduction to MVCarchitecture and Separation of Concerns.

2. Part 2: Creating MVC Application f romscratch and connecting it with database using LINQ to SQL.

3. Part 3: Connecting the MVC Application with the help of EntityFramework DB-First approach.

4. Part 4: Connecting the MVC Application with the help of EntityFramework Code-First approach.

5. Part 5: Implementing Repository Pattern in MVC Application with EntityFramework.

6. Part 6: Implementing a generic Repository Pattern and Unit Of Work pattern in MVC Application withEntityFramework.

Pre-requisites:

There are f ew pre-requisites bef ore we start with the article,

We have running sample application that we created in second part of the article series.

We have EntityFramework 4.1 package or dll on our local f ile system.

We understand how MVC application is created.

What is ORM and EntityFramework?

Page 2: learning MVCPart 3 Creating MVC Application Amp Perform CRUD Operations Using EntityFramework

The topic isn’t that scary as it seems to be. ORM(Object Relational Mapping) is basically an approach f orstoring data f rom domain/entity objects to relational database in an automated way without writ ing muchcode. A true ORM is independent of what database server we ref er to, the code underlying ORM’s isdatabase independent and can run with any database server having similar database with a structureneeded by the application.ORM has 3 main parts: Entity class objects, Relational db objects andinf ormation on how domain objects maps to relational db objects i.e. tables, views & storedprocedures.ORM helps us to keep our database design separate f rom our domain class design. This makes ourapplication maintainable and extendable. It also automates standard CRUD operation (Create, Read,Update & Delete) so developer doesn’t require to code them manually J.

Now let’s have a look on standard def init ion of Entity Framework given by Microsof t:

“The Microsoft ADO.NET Entity Framework is an Object/Relational Mapping (ORM) framework thatenables developers to work with relational data as domain-specific objects, eliminating the need formost of the data access plumbing code that developers usually need to write. Using the EntityFramework, developers issue queries using LINQ, then retrieve and manipulate data as strongly typedobjects. The Entity Framework’s ORM implementation provides services like change tracking, identityresolution, lazy loading, and query translation so that developers can focus on their application-specific business logic rather than the data access fundamentals.”

In a simple language, Entity f ramework is an Object/Relational Mapping (ORM) f ramework. It is anenhancement to ADO.NET, an upper layer to ADO.Net that gives developers an automated mechanism f oraccessing & storing the data in the database.Hope this gives a glimpse of an ORM and EntityFramework.

EntityFramework Architecture:Let’s have a glance over the architecture of EntityFramework,

Page 3: learning MVCPart 3 Creating MVC Application Amp Perform CRUD Operations Using EntityFramework

Our Web Application interacts with Entity Data Model (Entity Framework), that acts as an interf ace betweenADO.Net Provider and database, f etches/saves data in the same f low as described in the f igure.

Perform CRUD operations using EntityFramework on MVC application:

Open the existing Learning MVC application that we created using LINQ to SQL,

Page 4: learning MVCPart 3 Creating MVC Application Amp Perform CRUD Operations Using EntityFramework

I have made f ew changes in the existing application, just to make it easy to understand when we implementEntityFramework in it.

1.Changed the model class name from User to UserList ,

3. namespace LearningMVC.Models 4. { 5. #region User Model...

6. /// <summary>

7. /// User Model Class, purposely used for populating views and carry data from database.

8. /// </summary> 9. public class UserList 10. {

11. #region Automated Propert ies 12. public int UserId { get; set; }

13. public string FirstName { get; set; } 14. public string LastName { get; set; }

15. public string EMail { get; set; } 16. public string Address { get; set; }

17. public string PhoneNo { get; set; } 18. public string Company { get; set; }

19. public string Designation { get; set; } 20. #endregion 21. }

22. #endregion 23. }

. 2. Changed the Solution name f rom LearningMVC to LearningMVCWithEF.

Page 5: learning MVCPart 3 Creating MVC Application Amp Perform CRUD Operations Using EntityFramework

Steps to Follow:

1. Open the application, modif y it by above given changes.2. Delete the MyDBML.dbml class f rom the solution.3. Do not build the solution now, it will result in an error, as we have removed the dbml f ile, so controllermethod accessing the dbml f ile will throw compile t ime errors.4. Goto project right click and add new item, select Data in installed templates and add ADO.NetyEntityDataModel to the application,

Name it EFDataModel.edmx.

5.New window will be opened to choose model contents,

Page 6: learning MVCPart 3 Creating MVC Application Amp Perform CRUD Operations Using EntityFramework

Since we are f ollowing Database First approach, select generate From Database.

6.Choose the connection and give the name to connection string as MVCEntit ies as shown in the f igure,click next.

Page 7: learning MVCPart 3 Creating MVC Application Amp Perform CRUD Operations Using EntityFramework

7.Provide connection details to the existing database, that we used f or our existing application, databasename was MVC.If you don’t have existing one, create a new one with the attached db script f iles.

Page 8: learning MVCPart 3 Creating MVC Application Amp Perform CRUD Operations Using EntityFramework

8. Choose data base objects, we have only one table , so choose that one as shown in f igure,

Page 9: learning MVCPart 3 Creating MVC Application Amp Perform CRUD Operations Using EntityFramework

Give model namespace as MVCModel.

9.We get in our solution one guest,Entity Data Model that we saw in Entity Framework Architecture above,

Page 10: learning MVCPart 3 Creating MVC Application Amp Perform CRUD Operations Using EntityFramework

10. In web.conf ig you can see a new connection string is added.Now you can comment/delete oldconnection string of LINQ to SQL,

11. Generating Strongly Typed Entity Model Classes:(taken f rom a blog)We’ll be working with the strongly typed entity classes now. The Entity Data Model designer uses a codegenerator in Visual Studio called the Text Template Transf ormation Toolkit (T4). Entity Framework willautomatically generate a User class. The code generator nowwill create a class based on our Entity DataModel.

By def ault, the designer uses a template that results in entity classes that inherit f rom Entity Framework’sEntityObject and a container class which inherits f rom EF’s ObjectContext.These base classes can be cumbersome to work with f or a number of reasons. While the ObjectContext isextremely usef ul when you need a lot of control over Entity Framework’s behavior, the lighter weight

Page 11: learning MVCPart 3 Creating MVC Application Amp Perform CRUD Operations Using EntityFramework

DbContext provides access to the most commonly needed tasks and simplif ies your coding.Microsof t provides a number of alternative T4 templates f or generating classes f rom the EDM. When youinstalled the EF 4.1, a template f or creating simpler classes including the DbContext was added to VisualStudio. Let’s tell the designer to use this template instead of the def ault.· Right click on the model’s designer surf ace.· From the context menu, choose Add Code Generation Item.· In the Add New Item dialog that opens, select Code f rom the list of installed templates types on thelef t.

· Choose the ADO.NET DbContext Generator then click the Add button.

Two new f iles will be listed in Solution Explorer, Model1.Context.tt and Model1.tt. These are template f iles.Expand the templates to see the generated classes as shown in f ollowing f igure,

Page 12: learning MVCPart 3 Creating MVC Application Amp Perform CRUD Operations Using EntityFramework

12. When we open these two new guests, we see the context class to access model and model class f orour user entity is already created, with f ull code,

Have you noticed that we have’nt written a single line of code by our hand, this is the revolution thatEntityFramework has come up with, Let’s give a round of applause to our smart work,

Time to write some code now:

Till now we have not written a single line of code, but to access th context class, we need to change thelogic f rom accessing LINQ to SQL data context to EntityFramework data context in the controller we createdearlier in second part of the tutorial.

Steps to follow:

Step1: Bind all our views with UserList class, later it was user class, but we changed that to UserList class(remember????)

Step2:Open the controllers, change the access mechanism of context class as shown below f or e.g. Index

Page 13: learning MVCPart 3 Creating MVC Application Amp Perform CRUD Operations Using EntityFramework

Action,

Earlier

public Act ionResult Index() { var dbContext = new MyDBDataContext(); var userList = from user in dbContext.Users select user; var users = new List(); if (userList .Any()) { foreach (var user in userList) { users.Add(new LearningMVC.Models.User() { UserId = user.UserId, Address = user.Address, Company = user.Company, FirstName = user.FirstName, LastName = user.LastName, Designation = user.Designation, EMail = user.EMail, PhoneNo = user.PhoneNo }); } } ViewBag.FirstName = "My First Name"; ViewData["FirstName"] = "My First Name"; if(TempData.Any()) { var tempData = TempData["TempData Name"]; } return View(users); }

Now

public Act ionResult Index() { var dbContext = new MVCEntit ies() ; var userList = from user in dbContext.Users select user; var users = new List(); if (userList .Any()) { foreach (var user in userList) { users.Add(new LearningMVC.Models.UserList() { UserId = user.UserId, Address = user.Address, Company = user.Company, FirstName = user.FirstName, LastName = user.LastName, Designation = user.Designation, EMail = user.EMail, PhoneNo = user.PhoneNo }); } } ViewBag.FirstName = "My First Name"; ViewData["FirstName"] = "My First Name"; if(TempData.Any()) { var tempData = TempData["TempData Name"]; } return View(users); }

Page 14: learning MVCPart 3 Creating MVC Application Amp Perform CRUD Operations Using EntityFramework

You can see we just had to change access mechanism, mere change of 2-3 lines, and not anything in thelogic of application.

Step3: Like wise do the same f or all the Actions. I am not showing how to do here, but you can compare thesource codes and now can do by yourself .

Step4: Note LINQ to SQL context class uses InsertOnSubmit()/DeleteOnSubmit() and SubmitChanges()method f or Insert, update,Delete but EF context class uses .Add(), .SaveChanges().So do it skillf ully whenrequired.

Step5: All set now, rebuild your application, and you’ll not get a single error.Now ready to run.

Step6: When you run the application, it runs as was running previously and now you can perf orm CRUPoperations as an end user to the application, and test the application .

Nothing more dude, we are done with Entity f ramework’s database f irst approach now.You can applauseagain, and take some rest.

Conclusion:

We have already moved to one step on advanced level of CRUD operations in MVC.There is more to learnin MVC and Entity Framework, that we’ll be covering in upcoming articles.In this article we mastered how toperf orm CRUD operations in MVC application using EntityFramework’s database f irst approach,next article

Page 15: learning MVCPart 3 Creating MVC Application Amp Perform CRUD Operations Using EntityFramework

will f ocus on my f avourite CodeFirst approach J.Happy Coding.