8

個別の ELMAH データベースを持つ Web サイトがいくつかあります。これらすべてのデータベースを表示するために、1 つの別個の Web サイトを持ちたいと考えています。

この目的のために、新しい ASP.NET MVC 4 Web サイトを作成しました。NuGet パッケージ "Elmah.MVC" を追加し、以下を Web.config に追加しました。

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

これは、単一のデータベースに行くだけでうまく機能します。接続文字列を変更してデータベースを切り替えることもできますが、コードからデータベースを切り替えられるようにしたいと考えています。それを行う方法はありますか?

4

3 に答える 3

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 に答える