【问题标题】:C# How To Update Entity Model Connection StringC#如何更新实体模型连接字符串
【发布时间】:2010-12-25 17:27:23
【问题描述】:

这是我第一个使用实体框架的 WinForm 应用程序,我必须能够更新我动态创建的实体模型的连接字符串,并且在我的 app.config 文件中我有以下连接字符串:

<add name="NCIPEntities" connectionString="metadata=res://*/NCIPModel.csdl|res://*/NCIPModel.ssdl|res://*/NCIPModel.msl;provider=System.Data.SQLite;provider connection string='data source=&quot;C:\Test\NCIP\NCIP.db3&quot;;pooling=True'" providerName="System.Data.EntityClient" />

这是我为即时更新字符串而写的,它在运行时不会抛出任何错误,但也不会将新的连接字符串保存回 app.config 文件。

private void UpdateEntityConnection()
    {
        StringBuilder Sb = new StringBuilder();
        Sb.Append(@"metadata=res://*/NCIPModel.csdl|res://*/NCIPModel.ssdl|res://*/NCIPModel.msl;provider=System.Data.SQLite;provider""");
        Sb.Append("connection string='data source=" + Settings.Default.Directory + "\\NCIP.db3;pooling=True'");

        Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
        config.ConnectionStrings.ConnectionStrings["NCIPEntities"].ConnectionString = Sb.ToString();

        config.Save(ConfigurationSaveMode.Minimal);
        ConfigurationManager.RefreshSection("connectionStrings");
    }

有没有人看到我做错了什么,因为我没有。

谢谢。

【问题讨论】:

    标签: c# entity-framework


    【解决方案1】:

    所以我必须在应用程序启动事件本身中初始化 NCIPEntities。正确的?

    但是由于每次我的应用程序重新启动时我都从数据库中获取数据库名称,有没有办法可以修改 EntityConnectionString 并将其保存回配置文件。就像 SqlConnectionString.InitialCatalog 属性一样。

    【讨论】:

      【解决方案2】:

      你知道你可以这样做吗:

      var connstr = GetConnectionString();
      
      using (NCIPEntities ctx = new NCIPEntities(connstr))
      {
          ...
      }
      

      即实体框架不必从 App.Config 中获取连接字符串。

      知道这可能会稍微改变您的方法/要求吗?

      希望对你有帮助

      亚历克斯

      PS:您可能想查看我的Tip 45 了解更多信息。 我也有whole series of Tips

      【讨论】:

      • 哦,我的印象是这必须来自应用程序配置文件。如果不是这种情况,我可以将字符串存储为用户设置,然后使用它而不是 app.config?
      • 当然,我有一种你不知道的感觉。
      • 有没有办法设置一次连接字符串。即当我调用 db 时,每次我设置连接字符串。
      【解决方案3】:

      article here 会帮助你,但是......

      来自文章...强调我的

      所以这是我对方便的看法 小班,让你要么 修改、添加或删除任何 appSettings 元素,在您的可执行文件中, 控制台或 ASP.NET Web 应用程序位于 运行时,即时。请记住 当然,如果你修改一个 web.config 在正在运行的 ASP.NET 应用程序上, ASP.NET 工作进程将 回收。 当前使用您的用户 应用程序不能完全保证有 发生这种情况时的有趣体验...

      善良,

      【讨论】:

        【解决方案4】:

        您应该使用EntityConnectionStringBuilder 而不是尝试重写它。 :)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-10-12
          • 2013-04-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多