2014-01-30 35 views
2

我改变的EntityFramework连接字符串中的App.config这样的:刷新的EntityFramework连接

 var connectionString = new SqlConnectionStringBuilder(entityConnectionString.ProviderConnectionString); 

     connectionString.UserID = dbUser; 
     connectionString.Password = dbPass; 
     connectionString.InitialCatalog = dbCatalog; 
     connectionString.DataSource = dbServer; 

     entityConnectionString.ProviderConnectionString = connectionString.ToString(); 

     cString.ConnectionString = entityConnectionString.ToString(); 

     conf.Save(ConfigurationSaveMode.Full); 
     ConfigurationManager.RefreshSection("connectionStrings"); 

不过的EntityFramework继续使用旧的连接设置,直至重新启动应用程序。有没有办法强制EntityFramework从App.config获取新的连接字符串?

+0

你经常对连接字符串进行更改吗? – Miller

+0

每次通过ClickOnce进行部署。 – user3223738

回答

0

即使ConfigurationManager没有缓存内容(尽管Save()可能会刷新缓存),EntityFramework对象会缓存连接。在所有情况下,您需要释放这些对象并重新创建它们,以便从配置管理器(假设缓存被刷新)中拉出新的连接字符串,或者实际上手动修改DbContext对象上的连接字符串。

0

我相信特拉维斯是正确的。这里是我用来做这个的代码:

public void RefreshContext(string myConnectionString) 
{ 
    DisposeContext(); 
    Context = new MyContext(myConnectionString); 
} 

public void DisposeContext() 
{ 
    if (Context == null) 
    return; 
    Context.Dispose(); 
}