8

我有几个拥有独立 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>

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

4

3 回答 3

14

ELMAH 有一个用于自定义错误日志的类。你只需要像这样实现这个类

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

在此实现中,您可以读取所需的任何连接字符串。最后,您可以通过以下方式告诉 ELMAH 知道该 ErrorLog

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

您可以在此处查看详细信息

我还在这里找到了你的一个例子

希望这有帮助。

于 2013-05-06T12:46:24.013 回答
4

我在运行时检索连接字符串,因此 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 的值无关紧要,因为我们在运行时检索它,但它不能为空。

于 2015-08-16T19:09:07.707 回答
0

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

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

然后您需要将其实例存储在Session

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

并且每次要更改数据库连接时都需要运行该行。然后,当您想连接到数据库时,您需要将其拉出会话。

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

注意:您也可以简单地将连接字符串存储在会话中Session["DatabaseConnection"] = "your connection string"

于 2013-05-06T12:26:25.017 回答