Использование пользовательской строки подключения для миграции Code First Entity Framework - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть приложение, которое может установить соединение с базой данных.Есть много случаев использования этой базы данных многочисленными сайтами.Я хочу использовать миграцию для обновления схемы базы данных при загрузке программы.У меня это работает.Тем не менее, моя строка подключения, хранящаяся в app.config, была удалена (мной), и я использую конструктор строки подключения, чтобы получить данные для входа в систему, а также имя пользователя / пароль сервера / базы данных и изменить строку подключения в dbcontext для подключения к ихсобственная база данных.

Eg.                  source.Database.Connection.ConnectionString "TrustServerCertificate=False;Encrypt=true;Integrated Security =" + integratedSecuity + ";data source=" + Server + ";initial catalog=" + Database + ";persist security info=true;"+ ";MultipleActiveResultSets=True;App=EntityFramework\" providerName = \"System.Data.SqlClient";

Я использовал фрагмент из Stackoverflow для проверки изменений в моей структуре сущностей при запуске программы.

Db = Internal_ConnectionTools.ChangeDatabase(Db, Txt_Database.Text, Txt_Server.Text, Txt_User.Text,Txt_Password.Text);
            LabDatabase LD = new LabDatabase(Db.Database.Connection.ConnectionString);
            Database.SetInitializer<LabDatabase>(
                new MigrateDatabaseToLatestVersion<LabDatabase, Configuration>());
            LD.Database.Initialize(true);

Проблема, с которой я сталкиваюсь, заключается в том, что она продолжает указыватьвернуться к строке подключения в моем файле App.config и выдать ошибку, что первоначальный каталог не был определен (потому что ничего не определено проектом)

Если я заполняю строку подключения app.config своимучетные данные, моя база данных обновляется, как и ожидалось.

Как я могу гарантировать, что Entityobject.Database.Initialize () будет использовать мою обновленную пользовательскую строку и обновлять базу данных пользователей вместо значения по умолчанию для строки App.config?

1 Ответ

0 голосов
/ 28 декабря 2018

Хорошо, после еще нескольких копаний я нашел ответ здесь

Как программно установить конфигурацию строки подключения в .net?

Он описывает и предоставляетметод, использующий отражение, чтобы разрешить изменение строки подключения в экземпляре App.config.

Я сделал несколько очень небольших изменений в исходном коде в соответствии с моими целями.Мой исправленный метод приведен ниже.

private void SpoofAppConfig(string connectionStringName, string connectionString)
    {
        var settings = ConfigurationManager.ConnectionStrings[connectionStringName];

        var fi = typeof(ConfigurationElement).GetField("_bReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);

        fi.SetValue(settings, false);

        settings.ConnectionString = connectionString;
    }

Это ничего не изменит в самом файле app.config.

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

...