Dot Net Entity Framework数据库更新不会在mysql数据库中创建表

Dot Net Entity Framework数据库更新不会在mysql数据库中创建表

问题描述:

我使用 MySql 作为官方连接提供程序的数据库。我试着在mac上的下一个项目示例(asp.net核心1.0):

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; }
}

在我的Startup.cs

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();
    }



在我的project.json中,我还添加了

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"
    }
}

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

当我运行 dotnet ef迁移添加v1 ,工作正常,并创建迁移文件,但是当我执行 dotnet ef数据库更新数据库创建,但表不和抛出这个输出

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.


来自Oracle的官方MySQL提供程序不支持它的迁移或脚手架。

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

它只会在第一次执行 context.Database.EnsureCreated()时创建数据库。之后进行的任何更改将不会应用。你必须删除整个DB并创建一个新的,丢失所有的数据。

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.

感谢Oracle;)

更新

随着7.0.6-IR31的发布迁移做工作,但脚手架仍然没有。

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