我正在使用多个示例来说明如何设置MySql服务,但是几乎每个示例(包括Microsoft)都使用了硬编码的连接字符串。
这是我的创业公司
services.AddDbContext<DbContext>(options =>
{
options.UseMySql(configuration.GetConnectionString("DefaultConnection"),
mysqlOptions =>
{
mysqlOptions.ServerVersion(new ServerVersion(new Version(8, 0, 18)));
});
});
每当我尝试Update-Database
时,我都会看到一条错误消息,告诉我未设置密码
MySql.Data.MySqlClient.MySqlException(0x80004005):用户'root'@'localhost'的访问被拒绝(使用密码:是)。
环顾四周后,我发现了一个名为OnConfiguring
的可重写方法,但是我想以动态方式设置连接字符串,因为如果更改环境,我也希望该字符串也更改。
在这里,我发现几乎每个带有硬编码字符串(例如https://dev.mysql.com/doc/connector-net/en/connector-net-entityframework-core.html)的示例
答案 0 :(得分:0)
在配置文件中,您应该具有一个ConnectionStrings,它带有其他选项指向您的数据库。
"ConnectionStrings": {
"DefaultConnection": "server=127.0.0.1;uid=root;pwd=12345;database=test"
},
使用configuration.GetConnectionString时,您正在配置部分中查找值。
答案 1 :(得分:0)
如果未配置,则需要初始化配置。
这可以通过覆盖OnConfiguring
中的DbContext
方法来实现。
这样,您可以具有全局应用程序配置,该配置将在运行应用程序时被拉出。并在进行Db迁移时使用本地配置。
尝试
public class YourContext: DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder options)
{
if (options.IsConfigured == false)
options.UseMysql({YOUR_CONNECTION_STRING});
}
}
答案 2 :(得分:0)
在startup.cs上尝试
public class Startup
{
private readonly IConfiguration _config;
public Startup(IConfiguration config)
{
_config = config;
}
// This method gets called by the runtime. Use this method to add services to the
container.
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<MainContext>(options =>
options.UseOracle(_config["CONNECTION_STRING"]));
}
}
然后在您的上下文控制器上完成
public MainContext(DbContextOptions<MainContext> options) : base(options) { }
答案 3 :(得分:0)
基于comment,我认为您想将EF Core相关类分离到另一个程序集中。
在UseMySql
中,有一个配置MigrationsAssembly
的选项。您可以获取更多详细信息here
这是SQL Server的伪代码。
services.AddDbContext<EFCoreDemoContext>(options =>
{
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"),
assembly => assembly.MigrationsAssembly(typeof(EFCoreDemoContext).Assembly.FullName));
});