Dro*_*onz 1 connection-string web-config razor asp.net-mvc-3
我有一个ASP.NET/Razor 3 Web应用程序,它通过MS EntityFramework使用SQL Server数据库.
如果/当我想要更改数据库连接字符串时,例如更改密码或指向其他数据库(例如test vs live),则需要在项目的三个不同XML配置文件中的大约七个位置替换该字符串(app.config,web.config和app.release.config),这是一个容易出错的痛苦.
更糟糕的是,未处理异常的默认Web服务器行为可能包括向Web用户显示配置文件的各个部分,这实际上导致Web服务器显示通过Web显示数据库路径和密码的行.不好.
出于这两个原因,并且因为这不是任何人都可以编辑服务器上的配置文件的产品(任何变化都很多,也可能是一个构建操作),我更喜欢拥有数据库连接信息编译到Web应用程序中并从代码而不是配置文件加载,并且能够执行此操作,以便在我想更改数据库信息时,我可以在一个地方而不是七个地方执行此操作.
我怎么做到这一点?
数据库连接字符串可以在Global.asax.cs文件中集中设置,作为应用程序状态的一部分,然后从项目中的任何其他位置引用.
步骤1:在Global.asax.cs中将连接字符串定义为静态变量:
namespace TestProject
{
// Note: For instructions on enabling IIS6 or IIS7 classic mode,
// visit http://go.microsoft.com/?LinkId=9394801
public class MvcApplication : System.Web.HttpApplication
{
public static string ConnectionString1;
public static string ConnectionString2;
protected void Application_Start()
{
#region Build application state for the app-specific items needed by us
ConnectionString1 = "Server=yourserver;Database=yourdb;etc etc";
ConnectionString2 = "Server=yourserver;Database=yourdb;etc etc";
#endregion
#region Code auto-generated and needed by system - do not change
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
AuthConfig.RegisterAuth();
#endregion
}
}
}
Run Code Online (Sandbox Code Playgroud)
第2步:使用项目中任何其他位置的字符串:
string cnxStr1 = TestProject.MvcApplication.ConnectionString1;
string cnxStr2 = TestProject.MvcApplication.ConnectionString2;
Run Code Online (Sandbox Code Playgroud)
(请注意,默认情况下,字符串只能在同一个项目中访问.如果需要使用同一解决方案中任何其他项目的字符串,则需要添加对项目的引用.)
| 归档时间: |
|
| 查看次数: |
328 次 |
| 最近记录: |