EF核心-表'* .__ EFMigrationsHistory'不存在 [英] EF Core - Table '*.__EFMigrationsHistory' doesn't exist
问题描述
我想强调的是,这是.NET Core,有关EF 6.0的线程不适用于此问题
我创建了DbContext并将其添加到DI中,但是当我执行dotnet ef database update -v
时,它不想创建迁移表__EFMigrationsHistory
.
I created my DbContext and added it in DI, however when I do dotnet ef database update -v
it does not want to create the migrations table __EFMigrationsHistory
.
还有其他我应该首先执行的命令,或者这是EF Core MySQL适配器的错误吗?
Is there some other command that I should do first or this is a bug of EF Core MySQL adapter?
using Microsoft.EntityFrameworkCore;
using MySQL.Data.EntityFrameworkCore.Extensions;
using Web.Models;
namespace Web.Infrastructure
{
public class MainDbContext : DbContext
{
public DbSet<User> Users { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseMySQL("connection-string-here");
base.OnConfiguring(optionsBuilder);
}
}
}
错误
正在查找DbContext类...
Finding DbContext classes...
使用上下文"MainDbContext".
Using context 'MainDbContext'.
在服务器"localhost"上使用数据库"db".
Using database 'db' on server 'localhost'.
MySql.Data.MySqlClient.MySqlException:表'db .__ EFMigrationsHistory'不存在
MySql.Data.MySqlClient.MySqlException: Table 'db.__EFMigrationsHistory' doesn't exist
表'db .__ EFMigrationsHistory'不存在 ```
Table 'db.__EFMigrationsHistory' doesn't exist ```
project.json
{
"dependencies": {
"Microsoft.NETCore.App": {
"version": "1.0.1",
"type": "platform"
},
"Microsoft.AspNetCore.Diagnostics": "1.0.0",
"Microsoft.AspNetCore.Mvc": "1.0.1",
"Microsoft.AspNetCore.Razor.Tools": {
"version": "1.0.0-preview2-final",
"type": "build"
},
"Microsoft.AspNetCore.Routing": "1.0.1",
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.1",
"Microsoft.AspNetCore.StaticFiles": "1.0.0",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
"Microsoft.Extensions.Configuration.Json": "1.0.0",
"Microsoft.Extensions.Logging": "1.0.0",
"Microsoft.Extensions.Logging.Console": "1.0.0",
"Microsoft.Extensions.Logging.Debug": "1.0.0",
"Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
"Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0",
"BundlerMinifier.Core": "2.2.301",
"WebMarkupMin.AspNetCore1": "2.2.1",
"MySql.Data.EntityFrameworkCore": "7.0.6-IR31",
"Microsoft.EntityFrameworkCore.Design": "1.0.0-preview2-final"
},
"tools": {
"Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final",
"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final",
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
},
"frameworks": {
"netcoreapp1.0": {
"imports": [
"dotnet5.6",
"portable-net45+win8"
]
}
},
"buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true
},
"runtimeOptions": {
"configProperties": {
"System.GC.Server": true
}
},
"publishOptions": {
"include": [
"wwwroot",
"**/*.cshtml",
"appsettings.json",
"web.config"
]
},
"scripts": {
"prepublish": [ "bower install", "dotnet bundle" ],
"postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
}
}
临时解决方案
通过执行dotnet ef migrations script
,我可以获得可以直接在MySQL中执行的SQL代码.创建迁移表之后,一切正常.这是临时解决方案,很糟糕.我仍然想知道启用迁移的正确"方法是什么.
Temp Solution
By executing dotnet ef migrations script
I get SQL code that I can execute directly in MySQL. After that migrations table is created and everything works normally. This is temp-solution which is bad. I still wonder what is the "correct" way of enabling migrations.
推荐答案
将Mark G的评论变成答案.
Turning Mark G's comment into an answer.
创建__EFMigrationsHistory表后,其余的更新应运行.
Once the __EFMigrationsHistory table has been created, the rest of the update should run.
CREATE TABLE `__EFMigrationsHistory` ( `MigrationId` nvarchar(150) NOT NULL, `ProductVersion` nvarchar(32) NOT NULL, PRIMARY KEY (`MigrationId`) );
或者,在Package Manager控制台中使用此命令生成迁移脚本并手动将其应用于数据库:
Alternatively, generate the script of your migration(s) and apply to the database manually using this command in Package Manager Console:
Script-Migration
如果需要生成所有脚本,则可以使用以下命令:
If you need to generate All scripts, you can use this command:
Script-Migration -from 0
这篇关于EF核心-表'* .__ EFMigrationsHistory'不存在的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!