Изменить соединение / базу данных во время выполнения (Entity Framework)

Я создал приложение, которое считывает некоторые переменные из станка и загружает их на локальный сервер SQL. Есть две возможности, где запустить приложение

  • прямо на станке (есть iPC с SQL сервером)
  • на моем собственном ПК

В моем app.config у меня есть 2 строки подключения:

     <connectionStrings>
<!--<add name="Entities" connectionString="metadata=res://*/TosEntityModel.csdl|res://*/TosEntityModel.ssdl|res://*/TosEntityModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=WIN-652OQC8T8TT;initial catalog=TOSVariableDatabase.MDF;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />-->
<add name="Entities" connectionString="metadata=res://*/TosEntityModel.csdl|res://*/TosEntityModel.ssdl|res://*/TosEntityModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=WINDOWS-47TIMHV\SQLEXPRESS;initial catalog=TOSVariableDatabase;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient"/>
</connectionStrings>

Итак, если я хочу запустить свое приложение на станке, я комментирую первую строку подключения, а затем собираю приложение со второй строкой подключения - после этого загрузите его на станок и оно будет работать нормально. Если я хочу запустить его на своем ПК, я комментирую вторую строку подключения, раскомментирую первую, перестраиваю, и на моем ПК она работает нормально.

Но я бы хотел запустить свое приложение и только потом выбрать / изменить соединение - без перестройки и т. Д.

Итак, я попробовал пару вещей:

Сначала я попытался создать строку подключения, как здесь, а затем создать новый экземпляр контекста с этой новой строкой подключения. Я добавил это в конструктор контекста:

        public Entities(string sConnectionString)
        : base(sConnectionString)
    {            
    }

Затем я создал новый экземпляр контекста с этой строкой:

 dataManager.context = new Entities(entityBuilder.ConnectionString);

Это бросает мне ошибки:

основной провайдер не удалось открыть

а также

ошибка поставщика именованных каналов 40

Я пытался это исправить (перезапуск службы MSSQLSERVER и т. Д.), Но это не помогло.

Во-вторых, я попытался использовать решение из этой темы (статический метод ChangeDatabase), но у меня это не сработало (ничего не меняется, когда я запускаю этот метод с другим исходным каталогом и источником данных).

Итак, вы можете мне помочь? Может быть, есть более простое решение для моего случая?

Не бросайте в меня камни - я все еще новичок в программировании, особенно в Entity Framework.

1 ответ

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

Просто вы могли бы написать что-то вроде этого:

var ent = new Entities("metadata=res://*/TosEntityModel.csdl|res://*/TosEntityModel.ssdl|res://*/TosEntityModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=WIN-652OQC8T8TT;initial catalog=TOSVariableDatabase.MDF;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;");

Если он работает с app.config, ошибка в вашем коде.

Другие вопросы по тегам