EntityFramework Core Database.EnsureCreated不会创建数据库

时间:2017-02-23 10:32:35

标签: c# mysql .net-core entity-framework-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();
        }
    }
}

对种子类的调用:

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

1 个答案:

答案 0 :(得分:2)

我遇到了你描述的同样的问题。看起来SapientGuardian提供商可能只是在这个版本中有一个不完整的实现。

SapientGuardian项目的readme file实际上建议使用更积极维护的提供商,例如Pomelo.EntityFrameworkCore.MySql。所以我将我的项目改为Pomelo。现在,对EnsureCreated的调用会按预期创建数据库,并且没有身份验证失败的异常。