EntityFrameworkコアDatabase.EnsureCreatedはデータベースを作成しません

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

質問

私はdotnetcoreとエンティティフレームワークコアを使ってプロジェクトを作成します。私はMySqlデータベースを使用し、 SapientGuardian.EntityFrameworkCore.MySqlバージョン7.1.19依存関係を追加しました。

私は自分のデータベースを初期化するSeedDataクラスを作成しました:

public class SeedData
{
    public static void Initialize(IServiceProvider serviceProvider)
    {
        using (MyDbContext context = new MyDbContext(serviceProvider.GetRequiredService<DbContextOptions<MyDbContext>>())) {
            context.Database.EnsureCreated();
        }
    }
}

シードクラスへの呼び出し:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    // Other code

    SeedData.Initialize(app.ApplicationServices);
}

そしてサービスの構成:

public void ConfigureServices(IServiceCollection services)
{
    // Other code

    // Add database
    services.AddDbContext<MyDbContext>(options => {
            options.UseMySQL(Configuration.GetConnectionString("DefaultConnection"));
    });

    services.AddScoped<Microsoft.EntityFrameworkCore.Infrastructure.IDbContextOptions, Microsoft.EntityFrameworkCore.DbContextOptions<MyDbContext>>();
}

プロジェクトを開始すると、 EnsureCreateコールの例外がEnsureCreateます。例外メッセージがAuthentication failedが、手動で(テーブルなしで)データベースを作成すると、接続文字列がEnsureCreated動作し、 EnsureCreated単にエンティティのテーブルを作成します。

どうしましたか?それはSapientGuardian.EntityFrameworkCore.MySql問題ですか?

受け入れられた回答

私はあなたが説明した同じ問題を抱えていました。 SapientGuardianプロバイダがこのバージョンでは不完全な実装を単に持っているようです。

SapientGuardianプロジェクトのreadmeファイルは、実際にはPomelo.EntityFrameworkCore.MySqlなどのより積極的に維持されているプロバイダを使用することを提案しています。そこでプロジェクトをPomeloに切り替えました。今度はEnsureCreatedを呼び出すと、データベースが正常に作成され、認証に失敗した場合の例外はありません。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ