Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.
like image 823
Careuno Merchan Avatar asked Sep 22 '16 13:09

Careuno Merchan


2 Answers

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.

like image 94
Tseng Avatar answered Oct 16 '22 20:10

Tseng


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

like image 37
Shaun Luttin Avatar answered Oct 16 '22 22:10

Shaun Luttin