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.