AspNet Core添加迁移 - ConnectionString来自数据库

时间:2018-04-25 12:30:27

标签: asp.net asp.net-core .net-core asp.net-core-mvc asp.net-core-2.0

我正在使用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的基础构造函数。 Error Screenshot

我希望迁移能够动态地创建数据库和表。任何帮助表示赞赏。

谢谢

1 个答案:

答案 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文件。