【问题标题】:EntityFramework Core Database.EnsureCreated doesn't create databaseEntityFramework Core Database.EnsureCreated 不创建数据库
【发布时间】:2017-07-13 18:45:29
【问题描述】:

我创建了一个带有 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有问题吗?

【问题讨论】:

  • erikscandola,你解决了吗?
  • @JohnSmith,还没有
  • @erikscandola 你有空数据库吗?
  • @bravohex 我没有数据库
  • 我认为你应该先在mysql中创建空数据库。然后使用 ef code-first 来更新数据库

标签: c# mysql .net-core entity-framework-core


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2021-12-11
    • 1970-01-01
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多