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

У меня есть несколько баз данных, схемы их одинаковы. Когда я использую базу данных в первую очередь, строка подключения указывается при создании файла edmx. Я хочу знать, есть ли способ изменить строку подключения? Это так, поэтому я могу выбрать, какая база данных будет работать. Спасибо заранее!

3 ответа

Решение

Измените строку подключения в файле web.config.

  <connectionStrings>
    <add name="SandBoxEntities" connectionString="metadata=r... />
  </connectionStrings>

Я сократил фактическую строку подключения, потому что это не важно - просто хотел дать вам представление о том, что искать в файле web.config.

Вы также можете изменить строки подключения программно. Проверьте Пример 16.2. Программная модификация EntityConnectionString.

Мы не храним строки подключения в нашем файле web.configs, поэтому принятое решение не будет работать для нас. Если вы просто попытаетесь предоставить строку подключения через базовый конструктор DbContext, вы получите следующее исключение:

Код, сгенерированный с использованием шаблонов T4 для разработки Database First и Model First, может работать некорректно, если используется в режиме Code First. Для продолжения использования Database First или Model First убедитесь, что строка подключения Entity Framework указана в файле конфигурации исполняемого приложения. Чтобы использовать эти классы, которые были сгенерированы из Database First или Model First, с Code First добавьте любую дополнительную конфигурацию, используя атрибуты или API DbModelBuilder, а затем удалите код, который выдает это исключение.

Чтобы решить эту проблему, создайте частичный класс вашего контекста следующим образом и отформатируйте строку подключения с дополнительными метаданными EF (где MyContext - это ваш контекст название модели (например, ваша модель называется MyModel.edmx, чем MyContext в приведенном ниже коде заменяется MyModel со всеми тремя расширениями.csdl, .ssdl, .msl)):

public partial class MyContext
{
    public MyContext(string connStr)
        : base(string.Format(@"metadata=res://*/MyContext.csdl|res://*/MyContext.ssdl|res://*/MyContext.msl;provider=System.Data.SqlClient;provider connection string='{0}'", connStr))
    {
    }
}

Вы можете определить несколько строк подключения в web.config, а затем использовать их в своем коде, возможно, в своей работе. например:

<connectionStrings>
  <add name="conStr1" connectionString="metadata=r... />
</connectionStrings>`

<connectionStrings>
  <add name="conStr2" connectionString="metadata=r... />
</connectionStrings>`

и так далее

и ваш конструктор класса контекста получает имя строки подключения в качестве параметра:

 public MyContext(string connStr)
    :  base(connStr)    {    }

Хорошо. Теперь вы можете использовать в своем коде, как показано ниже:

using (var db = new MyContext("name=conStr1"))
{
  //your code here
}

а потом

using (var db = new MyContext("name=conStr2"))
{
   //your code here
}
Другие вопросы по тегам