Изменить соединение / базу данных во время выполнения (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="data source=WIN-652OQC8T8TT;initial catalog=TOSVariableDatabase.MDF;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" 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="data source=WINDOWS-47TIMHV\SQLEXPRESS;initial catalog=TOSVariableDatabase;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" 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="data source=WIN-652OQC8T8TT;initial catalog=TOSVariableDatabase.MDF;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"");
Если он работает с app.config, ошибка в вашем коде.