所以,基本上我在我的项目中使用EF
和Reverse POCO Code First Generator
。
我的连接字符串看起来像这样:
<connectionStrings>
<add name="HistoryDBContext" connectionString="" providerName="System.Data.SqlClient" />
<add name="ProjectMgtContext" connectionString="data source=xxx;initial catalog=xxx;user id=xx;password=xxx;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
</connectionStrings>
我的想法是,我将从connectionString
阅读HistoryDBContext
ProjectMgtContext
(工作正常),然后从{{1}重写connectionString
使用:
HistoryDBContext
但是,这仅适用于我运行项目的public static void WriteConnectionString(string connectionString)
{
var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var connectionStringsSection = (ConnectionStringsSection) config.GetSection("connectionStrings");
connectionStringsSection.ConnectionStrings["HistoryDBContext"].ConnectionString = connectionString;
config.Save();
ConfigurationManager.RefreshSection("connectionStrings");
}
,因为在第一次运行期间,它会抱怨second time
为空:
所以,显然我的方法不起作用。我该怎么做呢?
谢谢
修改
更多代码:
connectionString
答案 0 :(得分:1)
最有可能它不会这样。 EF可能不会在每次需要时从配置中重新读取连接字符串。它也可以缓存整个配置或仅缓存内存中的连接字符串。 App.config用于在应用程序运行时期间不会经常更改的连接字符串(或者更好)。只需将连接字符串直接传递给ProjectMgtContext,或者这样做:
public partial class ProjectMgtContext : DbContext {
public static string DefaultConnectionString;
public TestEntities()
: base(DefaultConnectionString)
{
}
然后更新DefaultConnectionString静态属性。如果您从模板生成上下文 - 编辑模板以添加上面的默认连接字符串。