# IT:AD:EF/CodeFirst/Migrations:HowTo:Enable-Migrations # * [[../|(UP)]] {{indexmenu>.#2|nsort tsort}} * See: * [[IT/AD/Code First/Migrations/HowTo/Add-Migration/Initial Migration]] Code Migrations have to be enabled on a project before it can start tracking changes. ## Process ## In `Nuget/Package Manager Console`, type: Enable-Migrations -startupprojectname:App.AppHost.Web -projectname:App.Back.Infrastructure -EnableAutomaticMigrations=false Note that in a single assembly POC, you could type: Enable-Migrations //...which is the same as being verbose regarding EnableAutomaticMigrations: //Enable-Migrations -EnableAutomaticMigrations=false ### New Migrations Folder The `Enable-Migrations` [[IT/AD/Powershell/]] script creates a new `Migrations` folder in the [[IT/AD/Visual Studio/]] project. ### New Configuration File The Migrations folder will contain a single `Configuration` class file: namespace XAct.Spikes.CodeMigration.Migrations { using System; using System.Data.Entity; using System.Data.Entity.Migrations; using System.Linq; //Note: it's sealed, so has to be in same assembly as your app's Dbcontext internal sealed class Configuration : DbMigrationsConfiguration { public Configuration() { //Value set by flag when `Enable-Migrations` was invoked: AutomaticMigrationsEnabled = true; } protected override void Seed(XAct.Spikes.CodeMigration.MyContext context) { // This method will be called after migrating to the latest version. // You can use the DbSet.AddOrUpdate() helper extension method // to avoid creating duplicate seed data. E.g. // // context.People.AddOrUpdate( // p => p.FullName, // new Person { FullName = "Andrew Peters" }, // new Person { FullName = "Rowan Miller" } // ); // } } } ### New Initial Migration In addition -- depending on the value of `-EnableAutomaticMigrations` it make another file. If `-EnableAutomaticMigrations` is set, no InitialCreate will be generated. But if it is not set, it will also make a new migration (eg, named `201309031323452_InitialCreate'), that will contain a complete description of the db up to that point... >Note: >if the db exists, and you invoke it with no flag, it will create the initializer -- but knowing that it will conflict/duplicate the existing db if run: *"Detected database created with a database initializer. Scaffolded migration '201309031323452_InitialCreate' corresponding to existing database. To use an automatic migration instead, delete the Migrations folder and re-run Enable-Migrations specifying the -EnableAutomaticMigrations parameter."* If you want to start out with no code migrations, and no automated migrations, see this: * [[IT/AD/Code First/Migrations/HowTo/Add-Migration/Initial Migration]] If a First Migration (InitialCreate) is created for you, it will look similar to: public partial class InitialCreate : DbMigration { public override void Up() { CreateTable( "dbo.SomeEntities", c => new { Id = c.Int(nullable: false, identity: true), Name = c.String(), }) .PrimaryKey(t => t.Id); } public override void Down() { DropTable("dbo.SomeEntities"); } } } * See: * [[IT/AD/Code First/Migrations/HowTo/Add-Migration/Initial Migration]] ## Resources ## * http://coding.abel.nu/2012/03/ef-migrations-command-reference/#Enable-Migrations