c# - 在运行时更改App.Config后,Entity Framework ConnectionString不会更新

9
我正在开发一个WPF应用程序,该应用程序依赖于Entity Framework进行数据访问。 在第一次安装时,我需要基于用户输入创建新的连接字符串,然后根据此更新App.Config文件。
问题是:更新App.Config文件后,Entity Framework无法检测到更改,并使用旧的启动时间ConnectionString实例化DbContext。
如何在运行时更新Entity Framework的ConnectionString设置?

你在部署的应用程序中有app.config文件吗? - Adriano Repetti
是的。Executable.exe.config - evolon
我曾经遇到过这个问题。我更改了连接字符串和数据库名称,但由于更新edmx,更改并没有生效。我关闭了解决方案并重新打开它,问题得到了解决。 - Mohammadreza
4个回答

8

Entity Framework 缓存连接字符串,没有一种方法可以强制刷新。

根据这篇文章:如果在DbContext构造函数中提供的连接字符串没有被缓存,则可以使用以下解决方法:

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

1
谢谢,顺便说一下,这是非常有用的链接。但是根据文档上方写的评论:“如果代码被重新生成,对此文件的手动更改将被覆盖”,那么更改不会在以后消失吗? - evolon
如果您重新编译应用程序... 是的,但这不是在已部署的应用程序上发生的事情。 - Adriano Repetti
1
请确保在命名空间中添加 "using System.Configuration"。 - Scooter
这只是一个hack而不是真正的解决方案,每次重建解决方案时都必须重置它..... - Jonathan Alfaro

0

Global.cs

public class Global
   {
    public static string ConnectionString=String.Empty;
   }

在第一次将连接字符串保存在App.config之后,将连接字符串暂时存储在Global.cs中。

DBContext.cs

 public class DBContext: DbContext
    {
        public DbSet<User> UserInfo { get; set; }   
        
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer(
                String.IsNullOrEmpty(Global.ConnectionString) ? ConfigurationManager.ConnectionStrings["your_connectionstring"].ConnectionString
                : Global.ConnectionString
                );
        }

    } 

首先,您已经在App.config中定义了连接字符串。 希望您喜欢!


0

我遇到了相同的错误。我的新连接字符串缺少“Initial Catalog=”


0
今天遇到了同样的问题。连接字符串存储在 obj 文件夹中缓存的 App.Config 文件中。
解决方案:删除 obj 文件夹。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接