2013-05-06 12 views
7

私は別々のELMAHデータベースを持ついくつかのウェブサイトを持っています。これらのデータベースをすべて表示するには、個別のWebサイトを1つ作成したいと考えています。コード内のELMAHデータベースを変更する

私は、この目的のために新しいASP.NET MVC 4ウェブサイトを作成しました。私は「Elmah.MVCを」NuGetパッケージを追加し、Web.configファイルに以下を追加しました:これは、単一のデータベースに行くだけで正常に動作し

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

。私はconnectionstringを変更してデータベースを切り替えることもできますが、今はデータベースからコードを切り替えることができます。それを行う方法はありますか?

答えて

11

ELMAHは、エラーログをカスタマイズするためのクラスがあります。この実装では、このクラスを実装する必要があるのは

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

です。この接続では、任意の接続文字列を読み取ることができます。 最後に、あなたはあなたが詳細here

を見ることができます

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

でELMAHはそれのErrorLogを知って伝えることができます私はまた、あなたのケースhere

・ホープ、このヘルプの一例を見つけました。

+0

どのようにこのサイトが大好きですか? –

0

コードからデータベースを切り替える場合は、Web.configに頼ることはできません。

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

、その後、あなたは Sessionにそのインスタンスを格納する必要があります:あなたはこのようなクラスのアクティブな接続を保存する必要があるとしている

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

、あなた'LLデータベース接続を変更するたびにその行を実行する必要があります。次に、データベースに接続する場合は、セッションを終了する必要があります。

しかし、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の値は重要ではありません、それはしかし空にすることはできません。

関連する問題