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

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

3 ответов


изменить строку подключения в web.конфигурационный файл.

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

я сократил фактическую строку подключения, потому что это не важно, просто хотел дать вам представление о том, что искать в интернете.конфигурационный файл.

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


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

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

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

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)    {    }

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

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

а то

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