c# - 在运行时更改 App.Config 后,实体框架 ConnectionString 不会更新

Posted

技术标签:

【中文标题】c# - 在运行时更改 App.Config 后,实体框架 ConnectionString 不会更新【英文标题】:c# - Entity Framework ConnectionString won't update after changing App.Config in runtime 【发布时间】:2015-08-28 13:58:36 【问题描述】:

我正在开发一个 WPF 应用程序,它依赖于实体框架进行数据访问。 在第一次安装时,我需要根据用户输入创建一个新的连接字符串,然后根据它更新 App.Config。

问题是:更新 App.Config 文件后,Entity Framework 没有检测到更改,而是使用旧的启动时 ConnectionString 来实例化 DbContext。

如何在运行时更新实体框架的 ConnectionString 设置?

【问题讨论】:

部署的应用中有app.config吗? 是的。可执行文件.exe.config 我遇到了这个问题。由于更新 edmx,我对连接字符串、数据库名称的更改不适用。我关闭解决方案并再次打开它,它可以工作。 【参考方案1】:

实体框架缓存连接字符串,没有强制刷新的方法。

来自this article:DbContext 构造函数中给出的连接字符串没有被缓存,那么您可以使用它作为解决方法:

public class MyContext : DbContext 
    public MyContext()
        : base(ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString)
    
    

【讨论】:

谢谢,顺便说一句非常有用的链接。但是根据上面的文档中写的 cmets 说“如果重新生成代码,对这个文件的手动更改将被覆盖。”,这些更改不会在以后消失吗? 如果您重新编译您的应用程序...是的,但这不会发生在已部署的应用程序上。 确保在命名空间中添加:“using System.Configuration”。 这只是一个hack而不是真正的解决方案,每次重建解决方案时都必须重置它.....【参考方案2】:

今天有同样的问题。连接字符串存储在 obj 文件夹中缓存的 App.Config 文件中。

解决方法:删除 obj 文件夹。

【讨论】:

【参考方案3】:

我有同样的错误。我的新连接字符串丢失了“Initial Catalog="

【讨论】:

以上是关于c# - 在运行时更改 App.Config 后,实体框架 ConnectionString 不会更新的主要内容,如果未能解决你的问题,请参考以下文章

C#调用WCF问题汇总

在运行时更改连接字符串并重新加载 app.config

是否可以(以及如何)在 C# 运行时将 ConnectionString 添加到 app.config?

在 C# 运行时读取、写入和更新 app.config 文件中的连接字符串

在运行时更改 App.config

C#之app.configexe.config和vshost.exe.config作用区别