Asp.net MVC 4 动态连接字符串
Asp.net MVC 4 dynamic connection string
我正在学习 Asp.net mvc 4 并正在修改一个 asp.net mvc 4 项目。
目前每个项目的web.config中都设置了数据库的连接。该项目使用 entity framework,我也在努力理解(我来自 java Apache Wicket 背景)。
我想要做的是为每个环境(本地、开发、测试、生产等)创建一个 属性 文件,并配置 属性 文件中的连接字符串以使用与该环境相关的数据库连接信息。
我已经看到了一些关于此的主题,Here and here。但是我不知道 Asp.net MVC 足以理解 C# class 我应该更改连接字符串。
最好的方法是什么?我开始使用 appSettings 的外部文件,但是当我不知道如何使用 appSetting key/value.
动态更改 web.config 时卡住了
我正在修改的这个应用程序有多个项目,有多个连接字符串。我将 EF 视为采用连接字符串的重载构造函数,但我看不到此构造函数的使用位置。所以现在,我只想了解一些如何动态修改连接字符串。我将在项目中的什么地方执行此操作?
对于那些也在寻找此问题解决方案的人,这是我的解决方案(这只是一种可能的解决方案)。
在我的 Web.config class 中,我为我的连接字符串使用了一个配置源:
<connectionStrings configSource="connections.config"/>
然后我用静态方法在我的 App_Start 文件夹中创建了一个 class:
public static void CloneEnvironmentConfigSource()
{
String path = AppDomain.CurrentDomain.BaseDirectory;
Debug.WriteLine("Path = " + path);
try
{
File.Copy(path + @"..\EnvironmentConfig\connections.config", path + @"connections.config", true);
}
catch (Exception ex)
{
Console.WriteLine(ex);
throw ex;
}
}
我在 Global.asax.cs 文件的 Application_Start() 中调用了这个方法...像这样:
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
ConnectionStringBuilder.CloneEnvironmentConfigSource();
基本上我在环境中有一个文件夹,我将 "deploying" 我的应用程序存储我的 configSource 文件以复制到项目中以供 Web.config 参考。
我不得不求助于此,因为 configSource url 映射不允许您转到其自身之上的目录。因此,这使我可以将我的项目部署到任何环境,而不必担心更改用于开发或测试的连接字符串信息。
希望这对某人有所帮助,如果此解决方案将来会出现问题或有人认为会有负面影响,请告诉我。
*** 只是更新。我遇到了 Application_Start() 被多次调用并减慢我的应用程序的问题。我认为这是因为此时 Web.config 被更改,框架已经加载了 web.config,所以它进行更改并重新加载所有内容。
我必须做的是 ConnectionStringBuilder.CloneEnvironmentConfigSource();从 Application_Start() 中取出并放入 AssemblyInfo.cs 中:
//Called to set config file dynamicaly used by Web.config file to set connectionstring.
//Has to be one of the first methods ran to avoid reload of Web.config after changes are made.
[assembly: PreApplicationStartMethod(
typeof(ConnectionStringBuilder), "CloneEnvironmentConfigSource")]
这样它会先 运行 。
我正在学习 Asp.net mvc 4 并正在修改一个 asp.net mvc 4 项目。
目前每个项目的web.config中都设置了数据库的连接。该项目使用 entity framework,我也在努力理解(我来自 java Apache Wicket 背景)。
我想要做的是为每个环境(本地、开发、测试、生产等)创建一个 属性 文件,并配置 属性 文件中的连接字符串以使用与该环境相关的数据库连接信息。
我已经看到了一些关于此的主题,Here and here。但是我不知道 Asp.net MVC 足以理解 C# class 我应该更改连接字符串。
最好的方法是什么?我开始使用 appSettings 的外部文件,但是当我不知道如何使用 appSetting key/value.
动态更改 web.config 时卡住了我正在修改的这个应用程序有多个项目,有多个连接字符串。我将 EF 视为采用连接字符串的重载构造函数,但我看不到此构造函数的使用位置。所以现在,我只想了解一些如何动态修改连接字符串。我将在项目中的什么地方执行此操作?
对于那些也在寻找此问题解决方案的人,这是我的解决方案(这只是一种可能的解决方案)。
在我的 Web.config class 中,我为我的连接字符串使用了一个配置源:
<connectionStrings configSource="connections.config"/>
然后我用静态方法在我的 App_Start 文件夹中创建了一个 class:
public static void CloneEnvironmentConfigSource()
{
String path = AppDomain.CurrentDomain.BaseDirectory;
Debug.WriteLine("Path = " + path);
try
{
File.Copy(path + @"..\EnvironmentConfig\connections.config", path + @"connections.config", true);
}
catch (Exception ex)
{
Console.WriteLine(ex);
throw ex;
}
}
我在 Global.asax.cs 文件的 Application_Start() 中调用了这个方法...像这样:
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
ConnectionStringBuilder.CloneEnvironmentConfigSource();
基本上我在环境中有一个文件夹,我将 "deploying" 我的应用程序存储我的 configSource 文件以复制到项目中以供 Web.config 参考。
我不得不求助于此,因为 configSource url 映射不允许您转到其自身之上的目录。因此,这使我可以将我的项目部署到任何环境,而不必担心更改用于开发或测试的连接字符串信息。
希望这对某人有所帮助,如果此解决方案将来会出现问题或有人认为会有负面影响,请告诉我。
*** 只是更新。我遇到了 Application_Start() 被多次调用并减慢我的应用程序的问题。我认为这是因为此时 Web.config 被更改,框架已经加载了 web.config,所以它进行更改并重新加载所有内容。
我必须做的是 ConnectionStringBuilder.CloneEnvironmentConfigSource();从 Application_Start() 中取出并放入 AssemblyInfo.cs 中:
//Called to set config file dynamicaly used by Web.config file to set connectionstring.
//Has to be one of the first methods ran to avoid reload of Web.config after changes are made.
[assembly: PreApplicationStartMethod(
typeof(ConnectionStringBuilder), "CloneEnvironmentConfigSource")]
这样它会先 运行 。