Как правильно применять EF, миграции, строку подключения при разработки программы и формирования БД и использования уже самим пользователем

Суть: Программа должна использовать PostgreSql, то есть пользователь скачивает отдельно ее, там настраивает значения подключения в основном это пароль. Далее при входе уже в программу использующая бд, нужно ввести данные подключения, которые запишутся в файл конфигурации программы.

Далее как я понял файл конфигурации не должен хранить строку подключения (не безопасно), поэтому записываю лишь Port, Host и название Database так они дефолтные для PostgreSql.

А вот название юзера и его пароль я получаю динамически от ввода пользователя.

Далее мне нужно создать информационную систему(ИС) - просто создание таблиц в бд), для этого:

  1. Пользователь вводит имяЮзера и пароль.
  2. Пользователь нажимает "Создать ИС", из файла конфигурации берутся Host, Port и Database и соединяются с введенными строками имяЮзера и пароля - получаем некую строку подключения.
  3. Нужно проверить есть ли доступ к бд, через: context.Database.CanConnect(), но чтобы проверить нужно переинициализировать строку подключения контекста данных так как изначально пустая.
  4. Если коннект возможен (то есть моя строка подключения совпадает с настройками подключения в postgreSql), то проверить применена ли миграция, если нет то применить миграцию для того чтобы создать таблицы.

Проблемы:

  1. Когда пользователь нажимает "Создать ИС", должна произойти миграция в коде C#, чтобы создались таблицы в БД, но они не создадутся так как нет миграции.

  2. Для того, чтобы создать миграцию в Visual Studio нужна начальная строка подключения, например:

     protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) =>
         optionsBuilder.UseNpgsql("Захардкоженная строка");
    

но ее изначально нет, так как ее я должен получить от ввода пользователя динамически позже когда контекст уже прокинут в класс.

То есть одно зависит от другого. Одна сторона разработчика другая сторона пользователя.

В итоге непонятно как правильно начать разработку программы с применением бд ее формирования при разработке, и работа с бд на уровне пользователя.

Может быть вообще логика должна быть другой для работы и программы и уровня пользователя?


Ответы (0 шт):