Я работаю с 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.

Я хочу, чтобы миграция создавала базу данных вместе с таблицами динамически. Любая помощь приветствуется.
Спасибо
@DawidRutkowski - Обновил вопрос с подробностями
fyi, вместо конкатенации строк существует объект ConnectionStringBuilder.





В сообщении об ошибке говорится, что вашему 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.
Спасибо за решение, но дело в том, что у меня есть динамические строки подключения. На самом деле у меня есть база данных, в которой хранятся строки подключения, которые создаются динамически. Итак, в то время, когда при запуске не создаются строки подключения, как я могу добавить миграцию. Проще говоря, есть ли способ добавить миграцию, если у меня нет строки подключения.
Просто прочтите ваше предложение еще раз - «могу добавить миграцию, если у меня нет строки подключения». Как вы хотите этого добиться? :) Чтобы иметь возможность обновлять базу данных, вам необходимо подключить эту базу данных.
Я знаю, что эта строка подключения требуется для обновления базы данных, но не требуется при создании миграции. Моя строка подключения к базе данных хранится в db, и в зависимости от выбора пользователя я хочу, чтобы контекст был создан.
Что вы имеете в виду под «поскольку он хочет, чтобы строка подключения соответствовала истории миграции». Вы можете показать, какое исключение вы получаете?