AspNet Core Добавить миграцию - ConnectionString из базы данных - PullRequest
0 голосов
/ 25 апреля 2018

Я работаю с AspNet Core 2.0, у меня есть ситуация, когда у меня есть контекст, но строка подключения является динамической в ​​соответствии с выбранным пользователем во время выполнения.

Add-Migration не работает, так как хочет, чтобы строка подключения соответствовала истории миграции.

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 голосов
/ 25 апреля 2018

В сообщении об ошибке говорится, что вашему 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 файл.

...