C#实体框架通过新连接重新连接到数据库

本文关键字:连接 重新连接 数据库 框架 实体 新连接 | 更新日期: 2023-09-27 18:28:14

1运行应用程序
2.创建上下文

dbContext = new DBFirstContext();

3更改实体FrameWork对象的App.config连接字符串

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
// change ConnectionString in App.Config for Entity FrameWork Object....
//.....
config.Save();
ConfigurationManager.RefreshSection("connectionStrings");
  1. 现在如果我创建

    dbContext = new DBFirstContext();
    

    它使用源代码未更改的connectionString,就像在启动应用程序时一样。如果关闭然后重新启动应用程序,则将使用修改后的connectionString创建新的dbContext。

PS:我不想通过使用这样的构造函数来传递新的连接字符串来创建新的dbContext:

public DBFirstContext(string sConnectionString)
        : base(sConnectionString)

我需要使用默认构造函数创建dbContext,并且它在不重新启动应用程序的情况下从app.config中获取一个新的(已更改的)连接字符串。有可能吗?

谢谢!

C#实体框架通过新连接重新连接到数据库

App.config只读取和解析一次。

请参阅"Darin Dimitrov"的答案,该答案被标记为最终答案。为什么在运行时不考虑我在App.config中对AppSettings的更改?(控制台应用程序)

我只是因为在谷歌上搜索这个答案而受到赞扬。所有其他的功劳都应该归于达林。

简而言之:你试图以一种不应该被使用的方式使用某些东西。您只想使用默认构造函数的原因是什么?

目前尚不清楚为什么需要在运行时更改app.config或连接字符串,但有一种方法可以在不重新构建的情况下更改上下文的连接字符串:

context.Database.Connection.ConnectionString = "connection string here";

当然,您的连接字符串必须遵循EF所需的格式,因此构造连接字符串的一种方法是:

 String.Format(
@"metadata=res://*/DBFirstContext.csdl|res://*/DBFirstContext.ssdl|res://*/DBFirstContext.msl;provider=System.Data.SqlClient;provider connection string='{0}'", connString);

其中connString是SQL Server连接字符串

我的解决方案如何使用默认构造函数通过使用当前应用程序配置中的connectionString创建上下文对象(应用程序配置在运行时编辑)

        public DBFirstContext()
        : base(System.Configuration.ConfigurationManager.ConnectionStrings["DBFirstContext"].ConnectionString)
    {
    }