Как правильно применять EF, миграции, строку подключения при разработки программы и формирования БД и использования уже самим пользователем
Суть: Программа должна использовать PostgreSql, то есть пользователь скачивает отдельно ее, там настраивает значения подключения в основном это пароль. Далее при входе уже в программу использующая бд, нужно ввести данные подключения, которые запишутся в файл конфигурации программы.
Далее как я понял файл конфигурации не должен хранить строку подключения (не безопасно), поэтому записываю лишь Port, Host и название Database так они дефолтные для PostgreSql.
А вот название юзера и его пароль я получаю динамически от ввода пользователя.
Далее мне нужно создать информационную систему(ИС) - просто создание таблиц в бд), для этого:
- Пользователь вводит имяЮзера и пароль.
- Пользователь нажимает "Создать ИС", из файла конфигурации берутся Host, Port и Database и соединяются с введенными строками имяЮзера и пароля - получаем некую строку подключения.
- Нужно проверить есть ли доступ к бд, через: context.Database.CanConnect(), но чтобы проверить нужно переинициализировать строку подключения контекста данных так как изначально пустая.
- Если коннект возможен (то есть моя строка подключения совпадает с настройками подключения в postgreSql), то проверить применена ли миграция, если нет то применить миграцию для того чтобы создать таблицы.
Проблемы:
Когда пользователь нажимает "Создать ИС", должна произойти миграция в коде C#, чтобы создались таблицы в БД, но они не создадутся так как нет миграции.
Для того, чтобы создать миграцию в Visual Studio нужна начальная строка подключения, например:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder.UseNpgsql("Захардкоженная строка");
но ее изначально нет, так как ее я должен получить от ввода пользователя динамически позже когда контекст уже прокинут в класс.
То есть одно зависит от другого. Одна сторона разработчика другая сторона пользователя.
В итоге непонятно как правильно начать разработку программы с применением бд ее формирования при разработке, и работа с бд на уровне пользователя.
Может быть вообще логика должна быть другой для работы и программы и уровня пользователя?