これは.NET Coreであり、EF 6.0に関するスレッドはこの問題に適用されないことを強調したい
DbContextを作成し、DIに追加しましたが、dotnet ef database update -v
を実行すると、移行テーブル__EFMigrationsHistory
を作成しません。
私が最初に行うべき他のコマンドがありますか、これはEF Core MySQLアダプタのバグですか?
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'は存在しません `` `
{
"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コードが得られます。その後、移行テーブルが作成され、すべてが正常に機能します。これは一時的な解決策であり、悪いことです。移行を可能にする「正しい」方法は何だと思いますか。
マークGのコメントを答えに変える。
__EFMigrationsHistoryテーブルが作成されると、残りの更新が実行されます。
CREATE TABLE `__EFMigrationsHistory` ( `MigrationId` nvarchar(150) NOT NULL, `ProductVersion` nvarchar(32) NOT NULL, PRIMARY KEY (`MigrationId`) );
または、パッケージマネージャーコンソールで次のコマンドを使用して、移行のスクリプトを生成し、データベースに手動で適用します。
Script-Migration
すべてのスクリプトを生成する必要がある場合は、次のコマンドを使用できます。
Script-Migration -from 0
標準のOracleプロバイダーを使用中に同じ問題が発生しました。
この質問によると Dot Net Entity Frameworkデータベースの更新ではmysqlデータベースにテーブルが作成されません 移行機能はまだ実装されていません。
私はSapientGuardianプロバイダーに切り替えた提案に従いましたが、今が最善の方法だと思われます。
編集:コメントで示唆されているように、Pomeloは2018年以降の最良のオプションです。元の回答以来、他のプロバイダーよりも選択しました。
私は同じ問題に遭遇します、OPコンテキストはわずかに異なるかもしれませんが、完全性のためにここに私の答えがあります。
この問題に遭遇する可能性のある方法の1つは、次の場合です。
その場合、OPによって報告されたエラーが表示されます
MySql.Data.MySqlClient.MySqlException:テーブル 'db .__ EFMigrationsHistory'は存在しません
この場合の解決策は、データベース全体を削除することですです。その後、update-databseコマンドが正常に実行されます。
Mysqlのみに関連するかどうかはわかりませんが、再開するには:
公式のOracle MySQLプロバイダーにも同じ問題がありました。
パッケージを追加しました:Install-Package SapientGuardian.EntityFrameworkCore.MySqlおよび移行が機能しました!