2013-05-06 18 views
7

Ho diversi siti Web che dispongono di database ELMAH separati. Mi piacerebbe avere un sito web separato per visualizzare tutti questi database.Modifica del database ELMAH nel codice

Ho creato un nuovo sito Web ASP.NET MVC 4 per questo scopo. Ho aggiunto il pacchetto NuGet "Elmah.MVC" e aggiunto il testo seguente web.config:

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

questo funziona bene andare a un singolo database. Posso anche cambiare il database cambiando la connessione, ma ora voglio essere in grado di cambiare il database dal codice. C'è un modo per farlo?

risposta

11

ELMAH ha una classe per personalizzare il log degli errori. Devi solo implementare questa classe come

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

in questa implementazione, puoi leggere qualsiasi stringa di connessione che desideri. Infine si può dire l'ELMAH conoscere che ErrorLog da

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

È possibile visualizzare i dettagli here

Ho anche scoperto un esempio nel tuo caso here

Spero che questo aiuto.

+0

Man come amo questo sito! –

0

Se si desidera cambiare il database dal codice, non sarà possibile fare affidamento sullo Web.config. Si sta andando ad avere bisogno di memorizzare la connessione attiva in una classe come questa:

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

e quindi è necessario memorizzare un'istanza di che nel Session:

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

e sarete è necessario eseguire tale linea ogni volta che si desidera modificare la connessione al database. Quindi, quando si desidera connettersi al database, è necessario estrarlo dalla sessione.

Tuttavia, è possibile memorizzare tutte le diverse stringhe di connessione nello Web.config e consentire all'utente di scegliere da tale elenco: non è possibile sfruttarlo per determinare la stringa di connessione.

NOTA: si potrebbe semplicemente archiviare la stringa di connessione nella sessione troppo Session["DatabaseConnection"] = "your connection string"

3

Sto recuperando la stringa di connessione in fase di esecuzione, quindi l'opzione di ThangChung non funzionava per me. Ma con alcune piccole modifiche l'ho fatto funzionare.

The SqlErrorLog, sono necessari entrambi i costruttori.

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 (aggiungere dopo system.webServer)

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

Il valore del connectionString non importa, perché proveremo a farlo in fase di esecuzione, non può essere vuoto però.