2013-05-06 7 views
7

Ich habe mehrere Websites, die separate ELMAH-Datenbanken haben. Ich hätte gerne eine separate Website, um all diese Datenbanken zu sehen.Ändern der ELMAH-Datenbank in Code

Ich habe eine neue ASP.NET MVC 4 Website für diesen Zweck geschaffen. Ich habe das NuGet Paket „Elmah.MVC“ hinzugefügt und fügte folgendes Web.config:

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

Das funktioniert ganz gut zu einer einzigen Datenbank gehen. Ich kann auch die Datenbank wechseln, indem ich die Verbindungszeichenfolge ändere, aber jetzt möchte ich die Datenbank vom Code wechseln können. Gibt es eine Möglichkeit, das zu tun?

Antwort

11

ELMAH hat eine Klasse speichern könnte das Fehlerprotokoll für anpassen. Sie müssen diese Klasse nur wie folgt implementieren:

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

In dieser Implementierung können Sie jede gewünschte Verbindungszeichenfolge lesen. Schließlich können Sie die ELMAH über diese ErrorLog wissen erzählen von

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

Sie die Details sehen here

Ich fand auch ein Beispiel in Ihrem Fall aus here

Hope this Hilfe.

+0

Mann, wie ich diese Seite liebe! –

0

Wenn Sie die Datenbank von Code wechseln möchten, können Sie sich nicht auf Web.config verlassen. Du wirst die aktive Verbindung in einer Klasse wie folgt speichern müssen:

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

und dann werden Sie eine Instanz, dass in Session speichern müssen:

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

und Sie werden Sie müssen diese Zeile jedes Mal ausführen, wenn Sie die Datenbankverbindung ändern möchten. Wenn Sie dann eine Verbindung zur Datenbank herstellen möchten, müssen Sie sie aus der Sitzung entfernen.

Sie könnten jedoch alle verschiedenen Verbindungszeichenfolgen im Web.config speichern und den Benutzer aus dieser Liste auswählen lassen - Sie können ihn nur nicht verwenden, um die Verbindungszeichenfolge zu ermitteln.

HINWEIS: Sie einfach die Verbindungszeichenfolge in der Sitzung zu Session["DatabaseConnection"] = "your connection string"

3

Ich rufe die Verbindungszeichenfolge zur Laufzeit ab, so dass die Option von ThangChung für mich nicht funktionierte. Aber mit ein paar kleinen Änderungen habe ich es geschafft.

Die SqlErrorLog, sowohl die Konstrukteure erforderlich.

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

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

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

Die web.config (add nach system.webServer)

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

Der Wert der Connection spielt keine Rolle, weil wir es zur Laufzeit abrufen, kann es allerdings nicht leer sein.

Verwandte Themen