C#Entity Framework通过新连接重新连接到数据库

时间:2015-12-25 21:09:45

标签: c# entity-framework

1运行申请书 2.创建上下文

dbContext = new DBFirstContext();

3更改实体框架对象的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。

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

    public DBFirstContext(string sConnectionString)
            : base(sConnectionString)
    

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

    感谢!

3 个答案:

答案 0 :(得分:3)

App.config仅被读取并解析一次。

见" Darin Dimitrov"这被标记为最终答案。 Why my changes of AppSettings in App.config is not taken into account in run-time? (Console Application)

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

简而言之:您尝试以某种不打算使用的方式使用某种方式。你只想使用默认构造函数的原因是什么?

答案 1 :(得分:0)

目前还不清楚为什么需要在运行时更改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 connection string

答案 2 :(得分:0)

我的解决方案如何使用来自curent App.Config的connectionString来创建上下文对象的默认构造函数(App.Config在运行时编辑)

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