2013-05-06 52 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中的價值並不重要,因爲我們在運行時檢索它,它不能是空的,但。

相關問題