Professional Documents
Culture Documents
Entity Framework 5 Code First in MVC 4 For Beginners
Entity Framework 5 Code First in MVC 4 For Beginners
A database can be created using Code First approach in Entity Framework 5. We will create a simple
application that will save recipe of dishes and information of writer of recipe. Its demo
application is linked at the end which will help to things understand the concept easily.
Database First
The first iteration of Entity Framework, which came as part of .NET 3.5 and VisualStudio 2008, enables
developers to create this model by reverse engineering an existing database into an XML file. The XML
ends with the EDMX extension which can be viewed with a designer, and it can be customized to better
suit your domain.
Model First
With the release of Visual Studio 2010 and .NET 4, the second version of Entity Framework was also
released. This version, called Entity Framework 4, aligned it with the .Net version. A new feature that
was added was Model First. Model First enabled you to design conceptual model in the visual designer
which enabled database creation based on the model.
Model First allows developers working on new projects that do not have legacy databases to benefit
too. Developers can develop the application domain by designing the conceptual model. The database
is created from that process.
After you have designed the EDMX, you should let automatic code generation build classes based on the
entities and their relationships. Developers can use them to represent domain objects.
Another critical change came in EF4. In .NET 3.5, the only way Entity Framework was able to manage in-
memory objects was by requiring classes to inherit from Entity Object. This enabled the database to
track the changes made. POCO (Plain Old CLR Object) was also introduced which enabled the Entity
Framework to track changes to simpler classes without needing the Entity Object. This benefited
developers as it allowed them to develop classes and use them.
Code First
Code First is a modeling path that lets the code define the domain model. This is beneficial for
developers since they are at ease writing codes rather than using a designer. Developers can define the
domain model through POCO.
With this approach you don’t need to do anything with SQL Server because Code First is designed to
create database purely from POCO classes. In Code First technique, models represent our tables in
database and properties represent columns in table
Note: We will work with two POCO classes so that we can focus on understanding of creation of
database. We will make a change in our model, and then will see how to update database again to
match our updated model.
Before proceeding, I want to make some terms easier for you like Scaffolding. Scaffolding is new feature
introduced to create views and controller automatically. It is used to automatically generate the baseline
of your application's CRUD (Create, Read, Update and Delete) without writing a single line of code. If you
have not written any MVC application till now, don’t worry since after this tutorial you will be able to
perform basic CRUD operations in MVC using Entity Framework 5 Code First.
This is One to Many relationship which shows Writers may have written many Recipes but One Recipe is
only and only written by one Writer
Creating MVC 4 Project :
Open your Visual Studio 2012 -> click on File -> New -> Project
Select Visual C# in left pane, and then select ASP.NET MVC 4 Web Application and name it KitchenApp
In MVC, we have basic structure of project which tells us that operations related Models should be done
in Model folder. Model folder will contain all model classes like Writer and Recipe. Views folder will
contain pages that will be shown to user. Controllers folder will have Action method that will co-
ordinate with models and Views. This will help us to easily maintain UI pages separate and Model and
Controllers logic separately
Let’s add Model class Writer in Models Folder. To add class, right click on Models folder and then Add
New Item. This will open dialog box.
Expand Visual C#, and select Code from left pane. Then select Class and name is Writer.cs, and click Add
button.
This will add a class Writer in Models folder and repeat this step to add Recipe.cs class
After this, the Solution Explorer should have both these files added -
publicclassWriter
{
publicint Id { get; set; }
[Required]
publicstring Name { get; set; }
This code shows Id that will be used as primary key in our database table. Entity
Framework identifies itself property that should be primary key by searching Id in
property or Class Name ending with Id, compiler will search for this sequence of
character in class and will make it primary key.
Name property will be Name column and [Required] shows Name is required and this column can’t be
null in table. Note that [Required] will show you error because they reside in
System.ComponentModel.DataAnnotations name space to use Annotation tags you just need to
add following name space
usingSystem.ComponentModel.DataAnnotations;
As we know that one writer can have multiple Recipes, that’s why ICollection has been added. It will tell
SQL Server relationship between Writer and Recipe Table. Recipes property will hold list of Recipes this
means Writer may have many Recipes associated with Writer.
Now double click on Recipe.cs and add following code in Recipe.cs class
publicclassRecipe
{
publicint Id { get; set; }
[Required]
publicstring Content { get; set; }
publicintWriterId { get; set; }
Here Id will become Id of Recipe table, and it will be auto incremented. Then we have
Content that will hold formula of our recipe, and WriterId will be foreign key references
to Id of Writer and in last
This property will show that Recipe will have only one Writer associated with one Recipe.
Writer.cs
Recipe.cs
Now we need to configure our project for Entity Framework 5.0. To configure our project for Entity
Framework 5.0 we need to install Entity Framework 5.0. The steps to install Entity Framework 5.0 are as
follows.
Click on Tools -> Library Package Manager and click on Package Manager Console this will open panel at
bottom of Visual Studio 2012
Here is snap shot
Now to install Entity Framework 5.0, you just need to write following command
You will see confirmation after few seconds till Visual Studio 2012 downloads and installs Entity
Framework 5.0 for your project
It will also add some code in web.config which is at root in solution explorer
Now let’s write a simple class that will inherit from DbContext class
The DbContext class is responsible for interacting with data as objects is System.Data.Entity.DbContext.
This class will be responsible for interacting with our Database for creating database, creating tables,
and for all CRUD operations. It will also connect to database, and there will be no need to initialize any
SqlConnection, SqlAdapter or anything else like we do traditionally in SqlClient
Adding Context Class
To add class, Right click on Models folder in solution explorer and New Item this will open dialog box,
name your class as KitchenContext
After creating this class, add the following name space in the class
usingSystem.Data.Entity;
Then paste the following code. Your class should look like (Must inherit your class with DbContext)
publicclassKitchenContext : DbContext
{
publicDbSet<Writer> Writers { get; set; }
publicDbSet<Recipe> Recipes { get; set; }
}
Here KitchenContext class is inherited from DbContext class to get Entity Framework
functionalities.
We can get all writers in table by making object of KitchenContext class that will perform all transactions
with database. We will cover this code in further tutorial also.
privateKitchenContextdb = newKitchenContext();
db.Writers.ToList();
So up to here we have now created kitchenContext class and class should look like
Now, let’s focus on Entity Frame work. We will tell it where to create our database and what should be
the name of database by putting Connection String in web.config file. The actual database can be
generated without mentioning connection string, and the name of database will be same as context
class. Its good practice to mention connection string so that we can name our database manually and
we can modify user of database. To do this, open web.config file from solution explorer and add
connection string next to ConfigSections tag. In our case, the connection string for data base is as
follows
<connectionStrings>
<addname="KitchenContext"connectionString="Data Source=DOTNET-PC\MSSQLSERVER2K8;Initial
Catalog=KitchenDB;User ID=sa;Password=1234"providerName="System.Data.SqlClient"/>
</connectionStrings>
Name of connection string should be same as context class name. In our case, name is KitchenContext,
and you need to change source according to your pc. Catalog=KitchenDB will be name of database, but
you can give any name. In our case, ID=sa and password is 1234 but you need to change it according to
your SQL server setting. Your web.config should look like
We have completed all the required tasks for making our database.
Creating Database with Migration
Migration will help us to update our database with our models if the models are changed
Click on Tools -> Library Package Manager and click on Package Manager Console. This will open panel at
bottom of Visual Studio 2012
PM> Enable-Migrations
You need to make AutomaticMigrationsEnabled = true so that you can update database easily otherwise
you will need to do additional steps to update database.
AutomaticMigrationsEnabled = true is better when you don’t want to track information of changing of
database otherwise it is recommended to use AutomaticMigrationsEnabled = false.
Seed method is automatically invoked after creation of database. This method is used to insert some
test data in database in our case we will add data from our pages
To create database, you all need to do
PM> Update-Database
This means database is created;now open SQL server to confirm our database has been created
Note that the name of Database is same which was mentioned in connection string, and name of tables
same as properties created in KitchenContext.cs
And column names are same as properties created in Writer.cs and Recipe.cs
Creating Controllers and Views using Scaffolding option
With the help of Scaffolding, you can create Controller and views with basic CRUD operations without
writing single line of code.
To add Controller, right click on Controllers folder, then add, and then click on Controller.
The following dialog box will open
Note: If you don’t get Template “MVC Controller with read/write actions and views” using Entity Frame
work, then please check for ASP.NET MVC Tools Update
We are adding controller for Writer model with the name WriterController. Select Template, select
model class, and in the last DataContext class that’s KitchenContext. Click Add, and this will add
controller with basic code for CRUD operations and also views.
Repeat this step and add Controller for Recipe
Updated solution explorer looks like
You need to remove some automatic generated code from Create.cshtml and Edit.cshtml at bottom of
page
Change it to
Do this for all Create and Edit pages, and your application is ready. Press control+F5 to execute and
navigate to writer like this http://localhost:1999/Writer. You don’t need to change your port number, in
my case it’s 1999.
Now Click on
Create New Recipe
Here you can see Writer that was added earlier. In this drop down we will have all writers
Even you don’t need to apply validation because Scaffolding has applied for your
Now I am going to add Title property in Recipe.cs to add Title column in Recipes Table
To update your database you need to run Update-Database Command again in Package Manager
Console
Now you can manually add this field in your page or you can delete RecipeController and Recipe folder
in Views, and add RecipeController again. In my case I am adding controller again by deleting previous
created RecipeController and Recipe folder in Views.
Make sure you have deleted previous RecipeControll and its views.
Click add and repeat this previous step for removing some auto generated code inCreate.cshtml and
Edit.cshtml
Then add link for Writers List
Again run your application by Control +F5 and navigate to writer like this http://localhost:1999/Writer.
You don’t need to change your port number, in my case it’s 1999.
Title field is added and [Required] validation is also applied
Note: To view validation messages click on Create button without filling form with data