我的app.config中只有一个连接字符串。我连接到设置数据库以检索其他连接字符串。我在运行时将这些其他连接字符串写入我的app.config中。一切似乎都按预期工作,但是Entity Framework似乎对更改无视,并在尝试使用其他连接字符串之一时引发异常。
以下步骤:
进程终止。重新运行没有清洁解决方案的调试程序,以使上次运行的连接字符串仍位于[my program] .exe.Config中。实体框架不再引发异常。基于此,我相信连接字符串是有效的,但是Entity Framework只是第一次没有看到它们。
代码
private void SetConnectionStrings()
{
var configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var section = (ConnectionStringsSection)configuration.GetSection("connectionStrings");
foreach (ConnectionStringSettings connectionString in ConfigurationManager.ConnectionStrings)
{
var newConnectionString = GetSetting(connectionString.Name);
if (!string.IsNullOrWhiteSpace(newConnectionString))
{
section.ConnectionStrings[connectionString.Name].ConnectionString = newConnectionString;
}
}
configuration.Save(ConfigurationSaveMode.Full);
ConfigurationManager.RefreshSection(configuration.ConnectionStrings.SectionInformation.Name);
}
GetSetting()只是从设置数据库中检索连接字符串。
我的app.config看起来像这样:
<connectionStrings>
<add name="SettingsContainer" connectionString="metadata=res://*/EntityFramework.ABC.csdl|res://*/EntityFramework.ABC.ssdl|res://*/EntityFramework.ABC.msl;provider=System.Data.SqlClient;provider connection string="data source=ASERVER;initial catalog=ABC;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework"" providerName="System.Data.EntityClient" />
<add name="AdditionalEntityFrameworkModel" connectionString="" providerName="System.Data.EntityClient" /></connectionStrings>
有什么建议吗?一切都是单线程的。我唯一能想到的是,app.config在启动时已加载到内存中,并且调用Save()和RefreshSection()不会更新内存中的版本,只会更新磁盘上的文件。