【问题标题】:Moving connection string from app.config to code in C#将连接字符串从 app.config 移动到 C# 中的代码
【发布时间】:2012-02-16 17:29:01
【问题描述】:

我正在尝试使用实体框架并将其连接字符串放入 app.config。我想将它移到代码中,因为在这个开发阶段对我来说更容易。

metadata=res://*/database.csdl|res://*/database.ssdl|res://*/database.msl;provider=System.Data.SqlClient;provider connection string="data source=computer;initial catalog=database;persist security info=True;user id=user;password=Mabm@A;multipleactiveresultsets=True;App=EntityFramework"

如何让实体框架使用代码中的连接字符串而不是查看app.config?或者,如果不可能,我如何将参数传递给app.config(如dbnamedbuserdbpassword)?

【问题讨论】:

  • “我想将它移动到代码中,因为在这个开发阶段对我来说更容易。” - 这比在 app.config 中更容易吗?让我怀疑你真正想回答的问题不是你问的那个。
  • 我想将它部署给用户并且不希望密码/登录名存储在 app.config 中。在实体框架之前,我在代码中对此进行了硬编码。可能不是最好的解决方案,但在这个阶段,我根本不想在 app.config 中为数据库打开文本登录名/密码。所以要么我必须以某种方式将参数传递给它,要么硬编码连接字符串。
  • @MitchWheat 这是一种方式,但这意味着我必须触及数据库安全性,我基本上让用户能够使用 SQL Management Studio 访问数据库,如果他愿意的话,可以直接进入数据库(可能他们赢了'不要这样做,因为他们不知道如何但仍然)。
  • 在这种情况下使用集成安全性(我怀疑您在非域基础架构中使用直接数据库访问)。通过将用户名和密码硬编码到您的应用程序中,您并没有使其更安全。你只是让架构变得更糟。

标签: c# winforms entity-framework app-config


【解决方案1】:

如果连接字符串登录详细信息始终相同,那么我建议您使用 ConfigurationManager 从您的 app.config 中检索连接字符串并加密文件的 ConnectionStrings 部分。

【讨论】:

    【解决方案2】:

    首先,使用带有 connectionString 参数的构造函数创建上下文。 http://msdn.microsoft.com/en-us/library/gg679467(v=vs.103).aspx

    请注意,您必须调用的不是直接此构造函数,而是实体生成器为您创建的数据库的特定继承上下文构造函数。

    此外,如果你想在运行时传递用户名和密码,你可以使用这个类创建一个连接字符串: http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnectionstringbuilder.aspx

    请看这里: http://msdn.microsoft.com/en-us/library/bb738533.aspx

    【讨论】:

      【解决方案3】:

      您可以为此目的使用EntityConnectionStringBuilderCheck here

      public string GetConnectionString()
          {
              string connectionString = new EntityConnectionStringBuilder
              {
                  Metadata = "res://*/Data.System.csdl|res://*/Data.System.ssdl|res://*/Data.System.msl",
                  Provider = "System.Data.SqlClient",
                  ProviderConnectionString = new SqlConnectionStringBuilder
                  {
                      InitialCatalog = ConfigurationManager.AppSettings["SystemDBName"],
                      DataSource = ConfigurationManager.AppSettings["SystemDBServerName"],
                      IntegratedSecurity = false,
                      UserID = ConfigurationManager.AppSettings["SystemDBUsername"],
                      Password = ConfigurationManager.AppSettings["SystemDBPassword"],
                      MultipleActiveResultSets = true,
                  }.ConnectionString
              }.ConnectionString;
      
              return connectionString;
          }
      

      【讨论】:

      • 谢谢。这与丹尼尔的答案是我需要的。我会接受丹尼尔斯回答我的问题,但没有他的回答是不完整的。
      【解决方案4】:

      与其使用用户名和密码,为什么不使用集成安全性?它更安全,更易于管理。

      即'Trusted_Connection = Yes' 在您的连接字符串中,并通过 AD 安全地管理访问。

      Connection Strings

      【讨论】:

        【解决方案5】:

        当您创建ObjectContext 派生类的实例时,您可以简单地将连接字符串作为构造函数参数传递。

        【讨论】:

        • 很好,为什么我没想到 :-)
        猜你喜欢
        • 2023-03-13
        • 1970-01-01
        • 2023-04-04
        • 2014-03-21
        • 1970-01-01
        • 2013-02-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-26
        相关资源
        最近更新 更多