2017-02-23 213 views
7

我使用dotnetcore和实体框架核心创建一个项目。我使用MySql数据库,并且我添加了对SapientGuardian.EntityFrameworkCore.MySql版本7.1.19的依赖。EntityFramework核心数据库.EnsureCreated不创建数据库

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

+0

erikscandola,你解决了吗? –

+0

@JohnSmith,还不是 – erikscandola

+0

@erikscandola你有一个空的数据库是否存在? – bravohex

回答

2

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

SapientGuardian项目的readme file实际上建议使用更积极维护的提供商,如Pomelo.EntityFrameworkCore.MySql。所以我把我的项目交给了柚子。现在,对EnsureCreated的调用按预期创建数据库,并且没有认证失败的异常。