2013-05-06 53 views
7

我有几个网站有单独的ELMAH数据库。我想有一个单独的网站来查看所有这些数据库。更改代码中的ELMAH数据库

我为此创建了一个新的ASP.NET MVC 4网站。我已经添加了NuGet包“Elmah.MVC”,并增加了以下到Web.config中:

<connectionStrings> 
    <add name="Elmah.Sql" connectionString="..." /> 
</connectionStrings> 
<elmah> 
    <errorLog type="Elmah.SqlErrorLog" connectionStringName="Elmah.Sql" /> 
</elmah> 

这只是正常去一个单一的数据库。我也可以通过更改连接字符串来切换数据库,但是现在我希望能够从代码切换数据库。有没有办法做到这一点?

回答

11

ELMAH具有自定义错误日志的类。你只需要实现这个类,如

public class YourErrorLog : SqlErrorLog 
{ 
    public override string ConnectionString 
    { 
     get 
     { 
      //return any connection string that you want 
     } 
    } 
} 

在这个实现中,你可以读取你想要的任何连接字符串。 最后,你可以告诉ELMAH知道这些错误日志由

<elmah> 
    <errorLog type="YourAssembly.YourErrorLog, YourAssembly" connectionStringName="elmah-sqlserver" /> 
</elmah> 

你可以看到细节here

我还发现了一个例子,你的情况here

希望这有助于。

+0

男人如何我爱这个网站! – 2015-04-27 17:08:18

0

如果您想从代码切换数据库,您将无法依赖Web.config。你将需要存储在一类这样的活动连接:

public class DatabaseSession 
{ 
    public string ConnectionString { get; set; } 
} 

,然后你需要存储的某个实例中Session

Session["DatabaseSession"] = new DatabaseSession() { ConnectionString = "your connection string"; } 

,你会每次需要更改数据库连接时都需要运行该行。然后,当你想连接到数据库时,你需要将它从session中取出。

但是,您可以将所有不同的连接字符串存储在Web.config中,并让用户从该列表中进行选择 - 您无法利用它来确定连接字符串。

注:你可以简单地存储在会话连接字符串太Session["DatabaseConnection"] = "your connection string"

3

我在运行时检索连接字符串,所以ThangChung的选项不适合我。但是,我做了一些小改动。

SqlErrorLog,这两个构造函数都是必需的。

public class ElmahSqlErrorLog : SqlErrorLog 
{ 
    public override string ConnectionString 
    { 
     get { return SettingsXmlService.GetConnectionString(); } 
    } 

    public ElmahSqlErrorLog(IDictionary config) : base(config) 
    { 
    } 

    public ElmahSqlErrorLog(string connectionString) : base(connectionString) 
    { 
    } 
} 

的Web.config(system.webServer后加)

<elmah> 
    <errorLog type="Business.Infrastructure.Elmah.ElmahSqlErrorLog, Business" connectionString="-" applicationName="Topsite" /> 
</elmah> 

ConnectionString中的价值并不重要,因为我们在运行时检索它,它不能是空的,但。

相关问题