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

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

Ответ 1

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

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

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

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

Ответ 2

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

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

Чтобы решить эту проблему, создайте неполный класс вашего контекста следующим образом и отформатируйте строку соединения с дополнительными метаданными EF (где MyContext является вашим именем модели context (например, ваше имя модели - 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))
    {
    }
}

Ответ 3

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

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

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

и т.д.

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

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

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

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

а затем

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