第一次运行时的ProviderIncompatibleException。但是,不是第二次

时间:2015-09-16 14:11:10

标签: c# entity-framework ef-code-first connection-string

所以,基本上我在我的项目中使用EFReverse 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为空:

enter image description here

所以,显然我的方法不起作用。我该怎么做呢?

谢谢

修改

更多代码:

connectionString

1 个答案:

答案 0 :(得分:1)

最有可能它不会这样。 EF可能不会在每次需要时从配置中重新读取连接字符串。它也可以缓存整个配置或仅缓存内存中的连接字符串。 App.config用于在应用程序运行时期间不会经常更改的连接字符串(或者更好)。只需将连接字符串直接传递给ProjectMgtContext,或者这样做:

public partial class ProjectMgtContext : DbContext {
    public static string DefaultConnectionString;
    public TestEntities()
        : base(DefaultConnectionString)
    {
 }

然后更新DefaultConnectionString静态属性。如果您从模板生成上下文 - 编辑模板以添加上面的默认连接字符串。