在运行时更改app.config会使实体框架混乱

时间:2018-09-07 13:24:12

标签: c# entity-framework app-config

我的app.config中只有一个连接字符串。我连接到设置数据库以检索其他连接字符串。我在运行时将这些其他连接字符串写入我的app.config中。一切似乎都按预期工作,但是Entity Framework似乎对更改无视,并在尝试使用其他连接字符串之一时引发异常。

以下步骤:

  • 清洁溶液。
  • 调试
  • [我的程序] .exe.Config使用单个连接字符串复制到bin / Debug
  • 实体框架连接到设置数据库并检索其他连接字符串
  • 使用其他连接字符串更新[my program] .exe.Config中的connectionStrings部分。 bin / Debug中的文件肯定已更新。
  • 使用先前步骤中的其他连接字符串之一为不同的数据库实例化Entity Framework上下文
  • 调用上下文。[任何内容] .ToList()引发异常'值不能为null。参数名称:connection'
  • context.Database.Connection为null,我认为是解释异常的原因?

进程终止。重新运行没有清洁解决方案的调试程序,以使上次运行的连接字符串仍位于[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=&quot;data source=ASERVER;initial catalog=ABC;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />

<add name="AdditionalEntityFrameworkModel" connectionString="" providerName="System.Data.EntityClient" /></connectionStrings>

有什么建议吗?一切都是单线程的。我唯一能想到的是,app.config在启动时已加载到内存中,并且调用Save()和RefreshSection()不会更新内存中的版本,只会更新磁盘上的文件。

0 个答案:

没有答案