我用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
?
答案 0 :(得分:2)
我遇到了你描述的同样的问题。看起来SapientGuardian提供商可能只是在这个版本中有一个不完整的实现。
SapientGuardian项目的readme file实际上建议使用更积极维护的提供商,例如Pomelo.EntityFrameworkCore.MySql。所以我将我的项目改为Pomelo。现在,对EnsureCreated的调用会按预期创建数据库,并且没有身份验证失败的异常。