C# динамическое изменение Entity framework connectionstring
Привет, используя приведенный ниже метод web api GET с entity framework. В настоящее время класс SchoolDBEntities() подключается к базе данных DEV. Как я могу изменить connectionstring, когда API перемещается до QAT, Pre-PROD & PROD. Есть ли способ, чтобы изменить его из интернета.файл config?
public class StudentController : ApiController { public IHttpActionResult GetAllStudents () { IList<StudentViewModel> students = null; using (var ctx = new SchoolDBEntities()) { students = ctx.Students.Include("StudentAddress") .Select(s => new StudentViewModel() { Id = s.StudentID, FirstName = s.FirstName, LastName = s.LastName }).ToList<StudentViewModel>(); } if (students.Count == 0) { return NotFound(); } return Ok(students); } }
Что я уже пробовал:
Я попытался использовать приведенный ниже код. Но не смог заставить его работать.
string connectionString = new System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]); System.Data.SqlClient.SqlConnectionStringBuilder scsb = new System.Data.SqlClient.SqlConnectionStringBuilder(connectionString); EntityConnectionStringBuilder ecb = new EntityConnectionStringBuilder(); ecb.Metadata = "res://*/Sample.csdl|res://*/Sample.ssdl|res://*/Sample.msl"; ecb.Provider = "System.Data.SqlClient"; ecb.ProviderConnectionString = scsb.ConnectionString; dataContext = new SampleEntities(ecb.ConnectionString);
public class SingleConnection { private SingleConnection() { } private static SingleConnection _ConsString = null; private String _String = null; public static string ConString { get { if (_ConsString == null) { _ConsString = new SingleConnection { _String = SingleConnection.Connect() }; return _ConsString._String; } else return _ConsString._String; } } public static string Connect() { //Build an SQL connection string SqlConnectionStringBuilder sqlString = new SqlConnectionStringBuilder() { DataSource = "SQLSERVER\\DEV".ToString(), // Server name InitialCatalog = "TestDB", //Database UserID = "devuser", //Username Password = "devpassword", //Password }; //Build an Entity Framework connection string EntityConnectionStringBuilder entityString = new EntityConnectionStringBuilder() { Provider = "System.Data.SqlClient", Metadata = "res://*/DevModel.csdl|res://*/DevModel.ssdl|res://*/DevModel.msl", ProviderConnectionString = @"data source=SQLSERVER\DEV;initial catalog=TestDB;user id=devuser;password=devpassword" // sqlString.ToString() }; return entityString.ConnectionString; } }
F-ES Sitecore
Обычно это делается с помощью так называемого "преобразования конфигурации", но это также зависит от того, какие инструменты развертывания вы используете (если таковые имеются) для передачи кода в другие среды.
Member 12586110
Привет, не могли бы вы помочь мне сделать это с помощью кода. Я обновил свой первоначальный пост соответствующим образом. Спасибо.
F-ES Sitecore
Если вы хотите сделать это в коде, то самый простой способ-иметь строку подключения для каждой среды в вашей конфигурации, например "ConnectionStringDev", "ConnectionStringTest" и т. д. Затем у вас есть другое значение конфигурации (например, ConnectionStringName), которое говорит, какова текущая строка подключения, поэтому на вашем локальном компьютере вы бы установили ее в "ConnectionStringDev". Вместо жесткого кодирования строки подключения для извлечения, вы будете использовать значение config вместо этого
строка connectionString = новая система.Конфигурация.Конфигурационные настройки.AppSettings[System.Конфигурация.Конфигурационные настройки.Параметр Appsettings["Заголовком"]]);
j snooze
Просто к вашему сведению, если у вас есть строки подключения в вашем конфигурационном файле и есть система.Конфигурация, добавленная в ваш проект, все, что вам нужно сделать, чтобы получить строку подключения из раздела строка подключения, - это следующее.
Конфигурационный менеджер.ConnectionStrings["DefaultConnection"].Параметр connectionString
Я предполагаю, что в вашем конфигурационном файле у вас есть
элемент connectionStrings вместе с --add name="DefaultConnection" connectionString="my server connection information here"--
Member 12586110
Привет, файл web.config имеет строку подключения базы данных.
<соединительные нити>
&ЛТ;добавить имя="mysqldb" connectionString="metadata=res://*/DevModel.csdl|res://*/DevModel.ssdl|res://*/DevModel.msl;provider=System.Data.SqlClient;поставщика строка подключения="источник данных=от SQLServer\Дев;начальный каталог=база данных testdb;идентификатор пользователя=devuser;пароль=devpassword;значение multipleactiveresultsets=true;в приложение=и EntityFramework"" имя_поставщика="системы.Данных.Entityclient создан" /&ГТ;
Как я могу использовать это в своем коде?
строка connectionString = System.Конфигурация.Конфигурационный менеджер.ConnectionStrings["mysqldb"].Параметр connectionString;
j snooze
Ну, если бы я правильно прочитал ваш код, я бы заменил жестко закодированные Stringbuilders в вашем методе Connect и просто вернул строку подключения, которую вы получаете обратно из configuration manager. Я предполагаю, что это те строки подключения, которые вы сейчас используете для подключения к своей базе данных?
Member 12586110
Привет, поскольку у меня есть строка подключения "SchoolDBEntities", могу ли я просто изменить сервер базы данных & database из файла web.config на DbContext во время развертывания?
public partial class SchoolDBEntities : DbContext
{
общественные SchoolDBEntities()
: base("name=SchoolDBEntities")
{
}
}
<соединительные нити>
&ЛТ;добавить имя="SchoolDBEntities" connectionString="metadata=res://*/DevModel.csdl|res://*/DevModel.ssdl|res://*/DevModel.msl;provider=System.Data.SqlClient;поставщика строка подключения="источник данных=от SQLServer\Дев;начальный каталог=база данных testdb;идентификатор пользователя=devuser;пароль=devpassword;значение multipleactiveresultsets=true;в приложение=и EntityFramework"" имя_поставщика="системы.Данных.Entityclient создан" /&ГТ;