Introduction
Before reading code migrations you must know about Entity framework and Architecture of MVC. MVC stands for Model View Controller. I’ve already written about Entity framework code first here Entity framework Code First From Scratch.
What are Code Migrations?
Code migrations are actually database initialization strategies that used in Entity framework code first approach.
Why Use Code Migrations?
After gaining some basic knowledge about code migrations, the second questionthat came to mind is, why do we need code migrations?
Description
In order to understand the concept and working of code migrations you should read my previous article. I’ve already written about installing and using Entity framework with Code First Approach in detail for novice programmers; see Entity Framework Code First from Scratch. We’ll follow the previous article and simply make some changes to our already-built database. Here are the steps we’ll follow.
- Make a console Application
- Installing Entity framework package to Solution
- Make Student Table with Code First
- Change database connection string to local SQL Server.
- Perform Read Write Operations on Database.
- Change the student Table by adding 1 more property to class.
- What is the error?
- Resolving the errors. (Updating database…)
- See the database again.
Example
We’ll work on a simple console application to understand Code Migrations. Let’s create a simple Console Application in Visual Studio.
After creating your project, there will be a main function inside a class.
- namespaceCode_Migrations_in_MVC_EF
- {
- classProgram
- {
- staticvoid Main(string[] args)
- {}
- }
- }
Installing Entity Framework to Solution
It’s time to install entity framework to the project. Open solution explorer. Use shortcut
[Ctrl + Alt + L] to open solution explorer. Right click to solution explorer and Click “
Manage nuget packages for the solution”. Nuget window will be opened after that.
Select the Browse tab and search for “
EntityFramework”. Select project to install EF and click Install button.
Now you’ll see the references for the entity framework has been added to your project.
Developing Database using Code Frist
It’s time to make a database for CRUD operations. Make a Student Classand associate that class with Database Context Class.
Add Student class as given,
Now add a database context class for the database activities. Inherit “
StudentDatabase” with “
DbContext” class. You might receive some error as I’m receiving the error in the following picture. You’re facing this error because adding entity framework reference to solution is not enough, You must include that library into your C# file in order to work with it.
To overcome that error include the following library to your program. You’ll see the errors will be removed after including EF library into file.
Now add Student class to your context class in order to couple the entities object with database class objects. Update your Context class with following code.
There is one more important thing -- we are going to work on code migrations so it would be easy for us to see the changes in Student class that are directly effecting our database table, so we shall change the database connection string towards SQL Server installed into the system. If Microsoft SQL Server is not installed to your system you can skip this. Open App.config file from solution explorer.
App.config file will be like this. See the space below the
configSections. We’ll add our customized connection string to force our database to be created into our SQL Server. If you don’t know how to create database in SQL Server while working with Code Frist read
Change Connection String for SQL Server local in Entity framework Code First in order to change configuration for database connection string.
Hope you’ve understood everything. Now everything is ready. We shall add some data to the table and then read that data from table. To perform this, update your main method with the code.
After adding this code build your project and then run it. Program will ask for input, and provide some name and press enter, it will take time to show the success message.
Now open up your SQL Server. You can see that the database with the name of “
StudentDatabase” has been created and a table with name “
Students” has been created also.
It’s time to change the database model.
Update student class with following code and just add one more property and run your code again.
Program will ask for input and after that the program will show error.
This error is telling us that your database model has been changed and there is no match between your SQL Server (physical database) and code classes. Here we need Code First Migrations to update the physical database according to model.
Default Behavior of Code First Migrations
Besure default code first migrations are set to off. You need to enable them before working with code first migrations. To start work with code migrations open the package manager console window.
Package manager console will be opened as you can see in following picture.
We’ll type the following commands one by one to update our physical database.
- Enable Code First Migrations
So type Enable-Migrations –EnableAutomaticMigrationsto enable migrations.
Code first migrations have been enabled for the project. Let’s see what changes has been reflected to our project. Open solution explorer and see the changes, you’ll notice that a folder named “Migrations” has been added to project which contain a “Configuration.cs” file.
And if you open the Configuration.cs file, you can see the code for migrations, you may enable or disable migrations by setting the AutomaticMigrationsEnabled property to true or false inside the constructor that class.
AutomaticMigrationsEnabled = true;
Run Update-Database
Now run command to update database “Update-Database” and watch the results.
After running this command you can check your database. It has been updated.
Now let’s run the program once again.
This this just one command. You can explore further on official site of Microsoft Entity framework
here.
Read more articles on ASP.NET: