我正在使用AspNet Core 2.0,我的情况是我有一个上下文,但连接字符串是动态的,如用户在运行时选择的那样。
添加迁移并不起作用,因为它希望连接字符串与迁移历史记录相匹配。
var datastore = _MainDBContext.datastores.FirstOrDefault(x=>x.db_type=="MS");
string connectionString = @"Server=" + datastore.db_instance_ip + ";Port=3306;Database=" + datastore.db_name + ";Uid=" + datastore.db_user + ";Password=" + datastore.db_pass + ";";
optionsBuilder.UseMySQL(connectionString);
_MSDBContext= new MSDBContext(optionsBuilder.Options);
_MSDBContext.Database.Migrate();
错误
没有为此DbContext配置数据库提供程序。可以通过覆盖DbContext.OnConfiguring方法或在应用程序服务提供程序上使用AddDbContext来配置提供程序。如果使用AddDbContext,那么还要确保您的DbContext类型在其构造函数中接受DbContextOptions对象,并将其传递给DbContext的基础构造函数。
我希望迁移能够动态地创建数据库和表。任何帮助表示赞赏。
谢谢
答案 0 :(得分:0)
错误消息显示您的DbContext需要一个接受DbContextOptions的构造函数。
public MSDBContext(DbContextOptions options) : base(options)
{
}
或者你可以尝试以下方法(在你的上下文类中):
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
IConfigurationRoot configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build();
var connectionString = configuration.GetConnectionString("NAME_OF_CONNECTION_STRING");
optionsBuilder.UseSqlServer(connectionString); //or any other DB provider
}
}
当然,您可以使用不同的逻辑来获取连接字符串。您不需要使用appsettings.json
文件。