Careuno Merchan
Careuno Merchan

Reputation: 315

Dot Net Entity Framework database update doesn't create tables in mysql database

I'm using MySql as database with the official connection provider. I'm trying it with the next project example (asp.net core 1.0) on a mac:

public class BloggingContext : DbContext
{
    public BloggingContext(DbContextOptions<BloggingContext> options)
        : base(options)
    { }

    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }
}

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }

    public List<Post> Posts { get; set; }
}

public class Post
{
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }

    public int BlogId { get; set; }
    public Blog Blog { get; set; }
}

And in my Startup.cs

    public void ConfigureServices(IServiceCollection services)
    {
        var connection = @"server=localhost;userid=efcore;port=3306;database=blogsFinal;sslmode=none;";
        services.AddDbContext<BloggingContext>(options => options.UseMySQL(connection));

        // Add framework services.
        services.AddMvc();
    }

In my project.json I also add

"dependencies": {
   ...
     "MySql.Data.EntityFrameworkCore": "7.0.5-ir21",

    "Microsoft.EntityFrameworkCore.Tools": {
      "version": "1.0.0-preview2-final",
      "type": "build"
    }
}

and

  "tools": {
    ...,
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"
  },

When I run dotnet ef migrations add v1, works fine and creates the migration files, but when I execute dotnet ef database update the database is created but tables not and throws this output

System.NotImplementedException: The method or operation is not implemented.
   at MySQL.Data.EntityFrameworkCore.Migrations.Internal.MySQLHistoryRepository.get_ExistsSql()
   at Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.Exists()
   at Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.GetAppliedMigrations()
   at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)
   at Microsoft.EntityFrameworkCore.Design.MigrationsOperations.UpdateDatabase(String targetMigration, String contextType)
   at Microsoft.EntityFrameworkCore.Tools.Cli.DatabaseUpdateCommand.<>c__DisplayClass0_0.<Configure>b__0()
   at Microsoft.Extensions.CommandLineUtils.CommandLineApplication.Execute(String[] args)
   at Microsoft.EntityFrameworkCore.Tools.Cli.Program.Main(String[] args)
The method or operation is not implemented.

Upvotes: 9

Views: 6563

Answers (2)

Tseng
Tseng

Reputation: 64150

Exceptions says it. The official MySQL Provider from Oracle doesn't support it migrations or scaffolding yet.

It will only create the Database on first execution of context.Database.EnsureCreated(). Any changes done after that, won't be applied. You have to drop the whole DB and create a new one, losing all data.

Say thanks to Oracle ;)

Update

With the release of 7.0.6-IR31 package migrations do work, but scaffolding still doesn't.

Upvotes: 8

Shaun Luttin
Shaun Luttin

Reputation: 141512

As Tseng said, this is a known issue. Here is the bug report from 14 Sept 2016.

Missing implementation for running EntityFramework Core code first migration

http://bugs.mysql.com/bug.php?id=82981

Upvotes: 1

Related Questions