是否可以更改app.config文件中的连接字符串,并让Entity Framework开始使用新值?
我有一个多线程应用程序,其中一个线程充当调度器。此线程能够接收消息,告诉它更改全部或部分连接字符串数据(如密码更改)。然后,它更新配置文件以包含新的连接信息并清除所有池数据库连接。这部分工作正常。
问题是,当调度器启动一个新线程,而该线程创建一个新的数据库上下文时,将使用旧的连接字符串值创建数据库连接。实体框架似乎正在某处保存此信息的缓存副本。如果我完全关闭并重新启动应用程序,它就会正常工作,因为显然,它必须从配置文件中读取新的值。
我已经看到了其他建议的解决方案,包括将连接字符串保留为变量并将其传递给上下文构造函数。但由于调度器线程对它创建的“作业”线程没有内部知识(有些线程甚至可能不需要数据库访问),所以这对我来说不太管用。至少在我的工作界面没有很多代码更改和特殊要求的情况下。
这是我用来更新文件的代码。正如我所说,这部分工作正常。我还需要做些什么来告诉实体框架关于变更的事情吗?
// Create new connection string
SqlConnectionStringBuilder connectionBuilder = new SqlConnectionStringBuilder(ConfigurationManager.ConnectionStrings[CONNECTION_STRING_NAME].ConnectionString);
connectionBuilder.DataSource = server;
connectionBuilder.InitialCatalog = database;
connectionBuilder.UserID = user;
connectionBuilder.Password = password;
// Update connection string within config file
Configuration config = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location);
ConnectionStringsSection section = (ConnectionStringsSection)config.GetSection("connectionStrings");
section.ConnectionStrings[CONNECTION_STRING_NAME].ConnectionString = connectionBuilder.ToString();
// Save changes
ConfigurationManager.RefreshSection("connectionStrings");
config.Save();