EntityFramework Core 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調用時遇到異常。異常消息說Authentication failed但如果我手動創建數據庫(沒有表),我的連接字符串工作正常, EnsureCreated只是為我的實體創建表。

怎麼了?這是SapientGuardian.EntityFrameworkCore.MySql的問題?

一般承認的答案

我遇到了你描述的同樣的問題。看起來SapientGuardian提供商可能只是在這個版本中有一個不完整的實現。

SapientGuardian項目的自述文件實際上建議使用更積極維護的提供程序,如Pomelo.EntityFrameworkCore.MySql 。所以我將我的項目改為Pomelo。現在,對EnsureCreated的調用會按預期創建數據庫,並且沒有身份驗證失敗的異常。



Related

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