Entity Framework 7 Code First Migrations
February 20, 2016 by Anuraj
ASP.NET5 ASP.NET Core EF7 Entity Framework Code First Migration CodeProject
This post is about Entity Framework 7 Code First Migrations. Code First Migrations is a Entity Framework feature which helps to apply database schema changes without re-creating the whole database. In ASP.NET 5, Microsoft released EF 7, which helps to run migrations with dnx command.
For enabling the code first migrations, you need to modify the project.json file and add the reference of EntityFramework package references and commands. Here is the project.json file.
{
"dependencies": {
"EntityFramework.Commands": "7.0.0-rc1-final",
"EntityFramework.SQLite": "7.0.0-rc1-final"
},
"commands": {
"ConsoleApp": "ConsoleApp",
"ef": "EntityFramework.Commands"
},
"frameworks": {
"dnx451": { },
"dnxcore50": {
"dependencies": {
"System.Console": "4.0.0-beta-23516"
}
}
}
}
Now you can try EF commands using dnx ef command, which will display EF screen like this.
Here is the model class and database context class.
public class BlogContext : DbContext
{
private static bool _created = false;
public BlogContext()
{
if (!_created)
{
_created = true;
Database.EnsureCreated();
}
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Data Source=./Blog.db");
}
public DbSet<Blog> Blogs { get; set; }
}
public class Blog
{
public int BlogId { get; set; }
public string Name { get; set; }
}
Now you can run the ef commands to create migrations.
dnx ef migrations add Initial
This command will create a Migrations folder and will display result like this.
Now you can run the code to create the database.
dnx ef database update Initial
Migration name is optional, if not specified, all the pending migrations will be applied. Once migrations completed, it will create the database and display a message like this.
You can add code to use the database. This code will create an entry into the blog table.
public static void Main()
{
using (var db = new BlogContext())
{
db.Blogs.Add(new ConsoleApp.Blog { Name = "Another Blog " });
db.SaveChanges();
foreach (var blog in db.Blogs)
{
Console.WriteLine(blog.Name);
}
}
}
Now you can modify the model class. A Url property added to the blog class.
public class Blog
{
public int BlogId { get; set; }
public string Name { get; set; }
public string Url { get; set; }
}
If you run the application, you will get a DbUpdateException. Now you can add one more migration and update the database.
Now you need to create another migration and need to update the database again.
dnx ef migrations add UrlAdded
Similar to Initial migration, it will create classes under Migrations folder. You can view the Migrations using list command like this.
dnx ef migrations list
And it will display something like this.
Now if you run the application using dnx run, you won’t see the DbUpdateException any more. Now let’s add one more class, and customize the database update.
Here is the post class and blog class also modified to enable relationship.
public class Blog
{
public int BlogId { get; set; }
public string Name { get; set; }
public string Url { get; set; }
public int Rating { get; set; }
public virtual List<Post> Posts { get; set; }
}
public class Post
{
public int PostId { get; set; }
[MaxLength(200)]
public string Title { get; set; }
public string Content { get; set; }
public int BlogId { get; set; }
public Blog Blog { get; set; }
}
Now you can create another migration for the Post class.
dnx ef migrations add PostClassAdded
We are making the title column as unique and rating column’s (new coloumn in blog class) default value as 3. You can open the PostClassAdded postfix file and modify the code. Here is the updated code, Rating default value set to 3 and Post title unique constraint added.
migrationBuilder.AddColumn<int>(
name: "Rating",
table: "Blog",
nullable: false,
defaultValue: 3);
migrationBuilder.CreateIndex("SampleUnique", "Post", "Title", unique: true);
Now if you run the database update, the database will be modified with new table and columns. Using EF migrations you can create SQL Scripts as well, which helps to share to the Database team if required. You can do that using script command.
dnx ef migrations script
It will print the generated SQL Script into the console. Like this
If you want to generate it file, you can use -o option, where you can specify the output file.
Happy Programming :)
Copyright © 2025 Anuraj. Blog content licensed under the Creative Commons CC BY 2.5 | Unless otherwise stated or granted, code samples licensed under the MIT license. This is a personal blog. The opinions expressed here represent my own and not those of my employer. Powered by Jekyll. Hosted with ❤ by GitHub