ELMAH - ASP.NET - >多个连接字符串 - >设置SQL错误日志中的连接字符串代码
-
22-08-2019 - |
题
我希望整合 ELMAH 到现有的ASP.NET应用程序,以进一步支持错误调查,并可以使用一些帮助与连接字符串。我们使用一个单一的web.config文件为我们所有的或环境的应用程序部署在,并在运行时,应用程序确定它是环境,通常基于URL。
这是一个标准的块想什么样的我们...
<connectionStrings>
<add name="TESTAppDB" connectionString="Data Source=SQL-T-APPNAME.COMPANY.COM;Initial Catalog=APPNAME;User ID=USER;Password=THEPASS" providerName="System.Data.SqlClient"/>
<add name="CERTAppDB" connectionString="Data Source=SQL-C-APPNAME.COMPANY.COM;Initial Catalog=APPNAME;User ID=USER;Password=THEPASS" providerName="System.Data.SqlClient"/>
<add name="PRODAppDB" connectionString="Data Source=SQL-P-APPNAME.COMPANY.COM;Initial Catalog=APPNAME;User ID=USER;Password=THEPASS" providerName="System.Data.SqlClient"/>
</connectionStrings>
使用ELMAH,看来,你只需要在连接字符串的名字,但我怎么能在运行时做到这一点动态?例如,如果我测试,那么我想这样的:
<elmah>
<errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="TESTAppDB"/>
</elmah>
,但如果我在PROD:
<elmah>
<errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="PRODAppDB"/>
</elmah>
修改强>结果 Web应用程序的部署做法以及超出范围了什么,我试图做的。我需要一个代码解决方案,让我改变了数据源的ELMAH SQL错误日志...
我不能改变我们今天部署Web应用程序的方式。这意味着,无论是在测试,移动到证书。什么是CERT移动到PROD。网络应用程序必须能确定它是在其中的环境和运行这样...
解决方案
由于ELMAH是开源它会很容易地添加自己的: - )
所有你需要做的是一个新的静态属性添加到SqlErrorLog
类,将包含您想使用的连接字符串,然后你会更新SqlErrorLog.ConnectionString
财产来回报您的自定义连接字符串,如果它有一个值。
尝试像这样添加到类(警告 - 未测试的代码):
public static string CustomConnectionString { get; set; }
public virtual string ConnectionString
{
get
{
if (string.IsNullOrEmpty(CustomConnectionString))
{
return _connectionString;
}
else
{
return CustomConnectionString;
}
}
}
此应该足够了。现在,所有你必须做的就是找到你选择你的连接字符串的位置,并更新其还设置SqlErrorLog.CustomConnectionString
属性。
其他提示
我用的Web部署项目这一点。您可以指定在其连接字符串为每个配置文件(调试,默认情况下释放)。这种方式对于所有部署的所有您的配置文件具有相同的文件和你的web.config是每个部署适当更新。
斯科特谷在这里有好消息:的http:// weblogs.asp.net/scottgu/archive/2005/11/06/429723.aspx
这是先前的释放,但信息仍然适用。
我会用一个连接字符串名“AppDB”,但在一个外部主机实际连接字符串配置文件(web.config文件之外),即在每个环境中不同。
在你的web.config:
<connectionStrings configSource="config\connectionStrings.config"/>
然后,在connectionStrings.config文件:
<connectionStrings>
<add name="AppDB" connectionString="Data Source=SQL-T-APPNAME.COMPANY.COM;Initial Catalog=APPNAME;User ID=USER;Password=THEPASS" providerName="System.Data.SqlClient"/>
</connectionStrings>
然后,根据该文件connectionStrings.config处于什么环境下,修改的connectionString。在代码中,只是提到“AppDB”。
要建立在符文格里姆斯塔的回答,除了他的更改,添加:
if (connectionString.Length == 0)
connectionString = CustomConnectionString;
后:
string connectionString = ConnectionStringHelper.GetConnectionString(config);
在SqlErrorLog(IDictionary的配置)构造。
然后我做了什么RSolberg做了,但是在的Application_Start,而不是会话:
Elmah.SqlErrorLog.CustomConnectionString = “您的CS”;
我们能在这种情况下数据库环境中使用?
我在MVC 3 web应用程序和予连接到与数据库上下文数据库(如上述的例子):
using (var ctx = new TESTAppDB())
{
var res = (from p in ctx.Customer select p).FirstOrDefault();
}
其中TESTAppDB:
public class TESTAppDB: DbContext
{
public DbSet<Customer> Customer{ get; set; }
}
如果我想连接到另一个数据库中,所以我写:
using (var ctx = new CERTAppDB())
{
var res = (from p in ctx.Order select p).FirstOrDefault();
}
这似乎是正确的......