EFコア - テーブル '* .__ 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
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ