EntityFramework Core Database.EnsureCreated不创建数据库

eri*_*ola 8 c# mysql entity-framework-core .net-core

我用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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

对种子类的调用:

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

    SeedData.Initialize(app.ApplicationServices);
}
Run Code Online (Sandbox Code Playgroud)

和服务配置:

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>>();
}
Run Code Online (Sandbox Code Playgroud)

当我启动项目时,我在EnsureCreate通话时遇到异常.异常消息说Authentication failed但如果我手动创建数据库(没有表),我的连接字符串工作正常,EnsureCreated只需为我的实体创建表.

怎么了?这是一个问题SapientGuardian.EntityFrameworkCore.MySql

小智 2

我遇到了你所描述的同样的问题。看起来 SapientGuardian 提供程序在此版本中的实现可能不完整。

SapientGuardian 项目的自述文件实际上建议使用更积极维护的提供程序,例如Pomelo.EntityFrameworkCore.MySql。所以我把我的项目转向了 Pomelo。现在,对 EnsureCreated 的调用按预期创建了数据库,并且没有身份验证失败异常。