【问题标题】:Centralized connection string. What are common practices?集中连接字符串。什么是常见的做法?
【发布时间】:2015-11-20 21:30:16
【问题描述】:

我正在寻找一种集中定位几个连接字符串的方法。我们的团队有很多项目,主要是控制台应用程序,还有一些 Web API 和网站。当然,这个数字还在继续增长,尤其是在控制台应用程序和 Web API 中。我们现在需要更改所有数据库服务器和用户名/密码。我们别无选择,只能现在手动对它们中的每一个执行此操作,但展望未来,我们希望提供一个中心位置,以便我们只需更改文件或位置一次,我们所有的应用程序都会获取设置从那里。

我一直在做一些搜索,到目前为止,我看到了使用和外部配置文件的建议,使用 machine.config,或者可能是 Web 服务来获取信息。

使用外部文件似乎没有太大帮助,因为如果需要更改,您仍然必须更改所有应用程序上的文件,即使它是外部文件。

理论上 machine.config 现在对我来说似乎是合乎逻辑的。您只需将连接信息放在机器级别,任何应用程序、站点或 Web API 都应该能够获取它。但是,我看到很多讨论,人们不鼓励这种做法。此外,我试图让我的代码从 machine.config 中提取连接信息,但目前我无法让它工作。

那么,有什么建议呢?任何人在使用 machine.config、外部文件或 Web 服务来存储连接字符串信息方面具有现实世界的优点/缺点?

【问题讨论】:

标签: c# asp.net asp.net-mvc connection-string


【解决方案1】:

最简单的方法是将配置文件保存在单个项目中,然后将该配置文件作为“Link”添加到其他项目中。

您也可以将应用程序配置中的连接字符串separate 保留在单独的配置文件中。并在单独的配置文件中使用连接字符串的引用。这是更具体的解决方案。

<configuration>
    <connectionStrings configSource="connections.config"/> 
</configuration>

文件connections.config包含

<connectionStrings>
   <add name="name" connectionString="your conn_string" providerName="System.Data.SqlClient" />
   <add name="name2" connectionString="your conn_string2" providerName="System.Data.SqlClient" />
</connectionStrings>

【讨论】:

  • “添加为链接”看起来是个不错的概念。我将尝试对其进行一些测试,但目前我不确定您将把配置项目放在哪里。换句话说,当我将文件添加为共享链接时,我是指向本地文件还是指向生产服务器上的文件?或者,引用是否更虚拟,所以我需要指向我的开发机器上的文件夹结构中的一个文件,该文件模仿生产机器,这样一旦它在 prod 中发布,它就会出现在相同的位置?
  • 您只需将它们保存在本地解决方案中。您可以将它们放在共享项目中(如果已经存在)或将它们保留为解决方案项目。如果您采用第二种方法,则物理位置应位于相同的解决方案层次结构中。此外,构建/发布过程应将配置文件复制到您的构建文件夹。在生产中,这些文件在您的解决方案中的位置无关紧要。
  • 我认为这会很完美。我在我的开发机器和测试服务器上都创建了一个文件夹结构 (d:\inetpub\config\connections.config)。然后我做了 Add as Link 并指向该配置文件。我添加了 configSouce="connections.config" 我的配置文件,就像您发布的代码一样。看起来这会成功的。现在,如果有什么变化,我只需在所有服务器上的 d:\inetub\config\connections.config 文件中进行更新。感谢您的代码!
  • 就在我认为我擅长这个的时候,我遇到了一个问题。我假设如果我们指向一个共享文件,它会查看共享文件的位置并从那里提取值。但是,看起来它所做的只是在创建共享文件后将其复制到项目中。所以,假设我做了共享文件,然后去添加或更改其中一个值。它没有反映代码中的这种变化。它将具有旧值和/或无法找到新值。
  • 无赖!不过感谢您的帮助。
【解决方案2】:

为此目的创建一个单独的类库,将连接字符串作为属性添加到类文件中。然后,您可以随时在任何需要数据库连接字符串的应用程序中引用此库。

从属性值中检索代码中的连接字符串。但是,使用这种方法,如果您进行任何更改,您总是需要重新编译代码。

【讨论】:

  • 如果我在 20 个应用程序中进行了此引用,那么如果连接发生变化,我是否必须编译和重新部署所有 20 个应用程序?如果是这样,那么它有点违背了我的中心位置的目的。这与使用所有 20 个应用程序的新更改更改应用程序或 Web 配置然后重新部署没有任何不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-02
  • 2010-10-16
相关资源
最近更新 更多