EF Core - 表'* .__ EFMigrationsHistory'不存在

.net-core c# entity-framework entity-framework-core mysql

我想強調這是.NET Core,而關於EF 6.0的線程不適用於這個問題

我創建了我的DbContext並將其添加到DI中,但是當我執行dotnet ef database update -v它不想創建遷移表__EFMigrationsHistory

是否還有其他一些我應該先做的命令,或者這是EF Core MySQL適配器的錯誤?

MainDbContext

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類...

使用上下文'MainDbContext'。

在服務器'localhost'上使用數據庫'db'。

MySql.Data.MySqlClient.MySqlException:表'db .__ EFMigrationsHistory'不存在

表'db .__ EFMigrationsHistory'不存在

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代碼。之後,創建了遷移表並且一切正常。這是臨時解決方案,這很糟糕。我仍然想知道啟用遷移的“正確”方法是什麼。

一般承認的答案

使用標準Oracle提供程序時遇到同樣的問題。

根據這個問題, Dot Net Entity Framework數據庫更新不會在mysql數據庫中創建表,它還沒有實現遷移功能。

我按照建議切換到SapientGuardian提供商,它似乎是現在最好的方式。

編輯:正如評論中所建議的,Pomelo是2018年開始時的最佳選擇。自從我的原始答案以來,我選擇了其他供應商。


熱門答案

將Mark G的評論轉變為答案。

創建__EFMigrationsHistory表後,應運行其餘的更新。

CREATE TABLE `__EFMigrationsHistory` ( `MigrationId` nvarchar(150) NOT NULL, `ProductVersion` nvarchar(32) NOT NULL, PRIMARY KEY (`MigrationId`) );

或者,生成遷移腳本並在程序包管理器控制台中使用此命令手動應用於數據庫:

Script-Migration

如果需要生成所有腳本,可以使用以下命令:

Script-Migration -from 0


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow