ELMAH - ASP.NET - >多个连接字符串 - >设置SQL错误日志中的连接字符串代码

StackOverflow https://stackoverflow.com/questions/878987

我希望整合 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();
}

这似乎是正确的......

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top