繁体   English   中英

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

[英]EntityFramework Core Database.EnsureCreated doesn't create database

我用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。 现在,对确保创建的调用将按预期方式创建数据库,并且没有身份验证失败异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM