Мой пример приложения был написан в режиме «Сначала база данных», а метод «CreateNewConnectionString», представленный ниже, работает просто отлично (хотя выглядит не так уж и элегантно).
Метод «CreateNewConnectionString2» выглядит действительно элегантно, НО вызывает исключение, говорящее мне, что он действителен только в режиме «Code First».
Итак, я предоставляю оба метода вместе с конструктором, который я изменил, чтобы использовать мои методы.ВНИМАНИЕ И ВНИМАНИЕ! Я изменил код, сгенерированный шаблоном, и он может быть перезаписан при повторном создании кода.Мне кажется, что это правильное место.
Если ваше приложение было сгенерировано в режиме «Code First», вам может понадобиться использовать «CreateNewConnectionString2» (я еще не тестировал эту опцию.)
Спешу признать, что я скопировал оба блока кода из других публикаций, так как пока не знаю достаточно обо всем этом, чтобы написать свой собственный код.
private static string CreateNewConnectionString(string connectionName, string password)
{
var config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~").ConnectionStrings.ConnectionStrings[connectionName];
//or:
//var config = ConfigurationManager.ConnectionStrings[connectionName];
var split = config.ConnectionString.Split(Convert.ToChar(";"));
var sb = new System.Text.StringBuilder();
for (var i = 0; i <= (split.Length - 1); i++)
{
if (split[i].ToLower().Contains("user id"))
{
split[i] += ";Password=" + password;
}
if (i < (split.Length - 1))
{
sb.AppendFormat("{0};", split[i]);
}
else
{
sb.Append(split[i]);
}
}
return sb.ToString();
}
private static string CreateNewConnectionString2(string connectionName, string password)
{
var originalConnectionString = ConfigurationManager.ConnectionStrings[connectionName].ConnectionString;
var entityBuilder = new EntityConnectionStringBuilder(originalConnectionString);
var factory = DbProviderFactories.GetFactory(entityBuilder.Provider);
var providerBuilder = factory.CreateConnectionStringBuilder();
providerBuilder.ConnectionString = entityBuilder.ProviderConnectionString;
providerBuilder.Add("Password", password);
entityBuilder.ProviderConnectionString = providerBuilder.ToString();
return entityBuilder.ProviderConnectionString;
}
public ChineseStudyEntities()
: base(CreateNewConnectionString("ChineseStudyEntities", "put YOUR password here")) // base("name=ChineseStudyEntities")
{
}