有一个asp.net项目(4.0),并试图找出访问连接字符串的最佳方式。ASP.NET的连接字符串访问
我在web.config文件中有两个连接字符串,一个用于prod和其他测试。有很多aspx页面,我想通过一个函数或某种全局变量来集中调用连接 - 这样,当我需要将连接字符串更改为指向测试或生产时,我只能将其更改为onle的地方。
任何想法的最佳做法。
谢谢。
有一个asp.net项目(4.0),并试图找出访问连接字符串的最佳方式。ASP.NET的连接字符串访问
我在web.config文件中有两个连接字符串,一个用于prod和其他测试。有很多aspx页面,我想通过一个函数或某种全局变量来集中调用连接 - 这样,当我需要将连接字符串更改为指向测试或生产时,我只能将其更改为onle的地方。
任何想法的最佳做法。
谢谢。
我在web.config文件中有2个连接字符串,其中一个用于prod,另一个用于测试。
这是不正确的做法。你要做的是让配置文件保持静态,并改变环境之间的代码,这与你应该做的事情相反。
在这种情况下,您应该在配置文件中有一个连接字符串,以及两个配置文件(每个环境一个)或Web.config转换,具体取决于您正在使用的工具。这个想法是,每个环境将具有相同代码的不同配置,而不是具有相同配置的不同代码。
所以在您的配置文件,你可能有这样的事情:
<connectionStrings>
<add name="myConnectionString" connectionString="Data Source=servername;Initial Catalog=databasename;Integrated Security=True" />
</connectionStrings>
(或任何实际的连接字符串。)
然后在你的代码,你会用这样的访问:
ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString
每个目标环境将(可能)有它自己的配置文件自身的连接字符串,但代码不应该有环境之间切换。
由于您正在寻找封装字符串,因此您无需在整个地方都使用整个ConfigurationManager
调用,您当然可以做到这一点。你如何去做取决于你。一种方法可能是在某个对象上有一个静态字段。事情是这样的:
public class DatabaseHelper
{
public static string ConnectionString
{
get
{
return ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString;
}
}
}
然后在其他地方使用的连接字符串在代码中,你可以这样做:
DatabaseHelper.ConnectionString
这是肯定会更短。它并不真正改变连接字符串的访问方式,它只是将其封装在自定义对象的后面,以减少在各行上使用的代码量。
DAL(数据访问层)将为您封装。有很多选择:Typed Datasets和TableAdapter是最古老的实体框架之一,NHibernate,Telerik OpenAccess ...基本上,检索连接字符串不是你不应该为自己编写代码的。
另外,正如@大卫所说的,最佳做法是为每个配置分别维护一个web.config,而不是一个包含两者。在我们的应用程序中,我们在web.config中有“其他”连接字符串,但它们被注释掉了。
我赞成David的回应。但会将此添加到对话中。
你可以在web.config的app.config文件中加入“指针”到外部文件。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings configSource="ExternalConnectionStrings.config" />
</configuration>
ExternalConnectionStrings.config
<connectionStrings>
<add name="MainConnectionString"
connectionString="blah blah blah "
providerName="yada.yada.yada" />
</connectionStrings>
的内容基于环境中,可以有多个 ExternalConnectionStrings.config文件......。
ExternalConnectionStrings.Development.config
ExternalConnectionStrings.QA.config
ExternalConnectionStrings.Staging.config
ExternalConnectionStrings.Production.config
的“折衷”是,你必须手动复制此文件(如用后生成事件)......但它是“干净”。
然后你只需要在原始的app.config(或web.config中)来改变一个值
<configuration>
<connectionStrings configSource="ExternalConnectionStrings.Production.config" />
</configuration>
我不是说我这样做,还是建议。但我宁愿你这样做....然后破解原始的app.config文件。
保持你的配置文件精益求精................当你想弄清楚哪个连接字符串正在被使用...你不想必须思考或解析一些巫术代码来弄清楚。
+1我建议为VS下载SlowCheetah插件用于此目的:http://visualstudiogallery.msdn.microsoft.com/69023d00-a4f9-4a34-a6cd-7e854ba318b5 – Icarus
是的。每个配置文件(每个环境)需要什么......以及一个配置文件中的一堆东西。 – granadaCoder
请不要写“voo doo”代码.......你可以在appSetting上更改,并且环境会改变。保持你的.config文件干净,明智等,等等和“标准”。继承你的代码的人会感谢你而不是诅咒你。 – granadaCoder