Search code examples
monoxamarinentity-framework-6

Enable Entity Framework migrations in Mono


I've started building an ASP.NET MVC3 project on Mac OS using Xamarin Studio. I now want to add new properties and models to the project but I can't for the life of me work out how to run the Nuget Package Manager console in order to run the Enable-Migrations command.

Am I asking too much? Is this possible or will I have to go back to Visual Studio on Windows?


Solution

  • All of the Entity Framework Migrations commands are just thin wrappers over an underlying API. To enable migrations, simply create a new class that derives from DbMigrationsConfiguration<TContext> in your project.

    For Add-Migration use code similar to the following.

    var config = new MyMigrationsConfiguration();
    var scaffolder = new MigrationScaffolder(config);
    var migration = scaffolder.Scaffold("Migration1");
    
    File.WriteAllText(migration.MigrationId + ".cs", migration.UserCode);
    
    File.WriteAllText(migration.MigrationId + ".Designer.cs", migration.DesignerCode);
    
    using (var writer = new ResXResourceWriter(migration.MigrationId + ".resx"))
    {
        foreach (var resource in migration.Resources)
        {
            writer.AddResource(resource.Key, resource.Value);
        }
    }
    

    For Update-Database see Running & Scripting Migrations from Code by Rowan Miller.

    Update for EF 6.3 👇

    A command named ef6.exe has been added to the NuGet package. It contains corresponding commands for each of the PMC commands:

    |        PMC        |        ef6.exe        |
    | ----------------- | --------------------- |
    | Enable-Migrations | ef6 migrations enable |
    | Add-Migration     | ef6 migrations add    |
    | Update-Database   | ef6 database update   |
    | Get-Migrations    | ef6 migrations list   |