第一次 运行 时出现 ProviderIncompatibleException。但是,不是第二次
ProviderIncompatibleException when running first time. But, not in second time
所以,基本上我在我的项目中使用 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>
我的想法是,我将从 ProjectMgtContext
读取 HistoryDBContext
的 connectionString
(工作正常),然后重写 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
是空的:
所以,显然我的方法是行不通的。我该如何处理?
谢谢
编辑
更多代码:
while (ProjectManager.HaveProjects())
{
var project = ProjectManager.GetNextProject();
if (project == null) continue;
/*Write the current project to the configuration file*/
Connection.WriteConnectionString(project.ConnectionString);
...
}
很可能这种方式行不通。 EF 可能不会在每次需要时都从配置中重新读取您的连接字符串。它也可以在内存中缓存整个配置或仅缓存连接字符串。 App.config 适用于在应用程序运行期间不经常更改(或根本不更改)的连接字符串。只需将连接字符串直接传递给您的 ProjectMgtContext,或者这样做:
public partial class ProjectMgtContext : DbContext {
public static string DefaultConnectionString;
public TestEntities()
: base(DefaultConnectionString)
{
}
然后更新 DefaultConnectionString 静态 属性。如果您从模板生成上下文 - 如上所述编辑模板以添加默认连接字符串。
所以,基本上我在我的项目中使用 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>
我的想法是,我将从 ProjectMgtContext
读取 HistoryDBContext
的 connectionString
(工作正常),然后重写 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
是空的:
所以,显然我的方法是行不通的。我该如何处理?
谢谢
编辑
更多代码:
while (ProjectManager.HaveProjects())
{
var project = ProjectManager.GetNextProject();
if (project == null) continue;
/*Write the current project to the configuration file*/
Connection.WriteConnectionString(project.ConnectionString);
...
}
很可能这种方式行不通。 EF 可能不会在每次需要时都从配置中重新读取您的连接字符串。它也可以在内存中缓存整个配置或仅缓存连接字符串。 App.config 适用于在应用程序运行期间不经常更改(或根本不更改)的连接字符串。只需将连接字符串直接传递给您的 ProjectMgtContext,或者这样做:
public partial class ProjectMgtContext : DbContext {
public static string DefaultConnectionString;
public TestEntities()
: base(DefaultConnectionString)
{
}
然后更新 DefaultConnectionString 静态 属性。如果您从模板生成上下文 - 如上所述编辑模板以添加默认连接字符串。