Elmah - ASP.NET -> Mehrere Verbindungszeichenfolgen -> Set SQL Error Log Connection String in-Code

StackOverflow https://stackoverflow.com/questions/878987

Frage

Ich bin auf der Suche zu integrieren ELMAH in eine bestehende ASP.NET-Anwendung zur weiteren Unterstützung Fehler Untersuchungen und könnte etwas Hilfe mit den Verbindungszeichenfolgen verwenden. Wir verwenden eine einzelne Datei web.config für alle oder unsere Umgebung die Anwendung implementiert wird, und zur Laufzeit entscheidet der App, die Umgebung ist es in der Regel basierend auf URL.

Dies ist, was ein Standard-Block wie für uns möchte ...

  <connectionStrings>
    <add name="TESTAppDB" connectionString="Data Source=SQL-T-APPNAME.COMPANY.COM;Initial Catalog=APPNAME;User ID=USER;Password=THEPASS" providerName="System.Data.SqlClient"/>
    <add name="CERTAppDB" connectionString="Data Source=SQL-C-APPNAME.COMPANY.COM;Initial Catalog=APPNAME;User ID=USER;Password=THEPASS" providerName="System.Data.SqlClient"/>
    <add name="PRODAppDB" connectionString="Data Source=SQL-P-APPNAME.COMPANY.COM;Initial Catalog=APPNAME;User ID=USER;Password=THEPASS" providerName="System.Data.SqlClient"/>
  </connectionStrings>

Mit Elmah scheint es, dass Sie nur den Namen der Verbindungszeichenfolge angeben müssen, aber wie kann ich das tue dynamisch zur Laufzeit? Zum Beispiel, wenn ich Test bin, dann will ich diese:

<elmah>
     <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="TESTAppDB"/>
</elmah>

aber wenn ich in ART:

<elmah>
     <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="PRODAppDB"/>
</elmah>

Bearbeiten
Die Bereitstellungsverfahren für Web-Anwendungen sind auch außerhalb des Bereichs für das, was ich zu tun versuchen. Ich brauche einen Code-Lösung, die mir die Datenquelle für die ELMAH Sql Error Log ändern können ...

Ich kann nicht die Art und Weise ändern, wie sie Web-Anwendungen heute einsetzen. Das heißt, was auch immer in TEST ist, bewegt sich Zert. Was in CERT ist bewegt zu ART. Die Web-App muss in der Lage sein, zu bestimmen, welche Umgebung es ist in und laufen als solche ...

War es hilfreich?

Lösung

Da Elmah Open-Source ist, würde es leicht sein, um Ihre eigene: -)

Alle würden Sie tun müssen, war eine neue statische Eigenschaft auf die SqlErrorLog Klasse hinzuzufügen, die die Verbindungszeichenfolge Sie wollten Sie würden aktualisieren, um die SqlErrorLog.ConnectionString Eigenschaft enthalten würde verwenden und dann Ihre benutzerdefinierte Verbindungszeichenfolge zurück, wenn sie einen Wert hatte.

Versuchen Sie, so etwas zu der Klasse hinzuzufügen (Warnung - nicht getesteten Code):

public static string CustomConnectionString { get; set; }

public virtual string ConnectionString
{
  get 
  { 
    if (string.IsNullOrEmpty(CustomConnectionString)) 
    {
      return _connectionString;
    }
    else
    {
      return CustomConnectionString; 
    }
  }
}

Das sollte genug sein. Alles was Sie jetzt tun müssen, ist die Position zu finden, wo Sie Ihre Verbindungszeichenfolge und aktualisieren sie wählen, um auch die SqlErrorLog.CustomConnectionString Eigenschaft.

Andere Tipps

Ich benutze ein Web-Bereitstellungsprojekt für diese. Sie können für jede Konfiguration in eine Datei mit der Verbindungszeichenfolge angeben (Debug und standardmäßig Release). Auf diese Weise alle Ihre Konfigurationsdateien für alle Installationen die gleichen Dateien und web.config aktualisiert wird in geeigneter Weise für jeden Einsatz.

Scott Gu hat gute Infos hier: http: // weblogs.asp.net/scottgu/archive/2005/11/06/429723.aspx

Es ist für eine ältere Version, aber die Informationen gelten nach wie vor.

ich eine Verbindung string namen „AppDB“ verwenden würde, aber tatsächlich in einem externen die Verbindungszeichenfolge Host (außerhalb der web.config-Datei) Konfigurationsdatei, das ist anders in jeder Umgebung.

In Ihrer web.config:

<connectionStrings configSource="config\connectionStrings.config"/>

Dann werden in der connectionStrings.config-Datei:

<connectionStrings>    
    <add name="AppDB" connectionString="Data Source=SQL-T-APPNAME.COMPANY.COM;Initial Catalog=APPNAME;User ID=USER;Password=THEPASS" providerName="System.Data.SqlClient"/>
</connectionStrings>

Dann, je nachdem, in welcher Umgebung die connectionStrings.config Datei in ist, ändern Sie die Connection. Im Code beziehen sich nur auf „AppDB“.

Zum Aufbau auf Rune Grimstad Antwort, zusätzlich zu seinen Änderungen hinzu:

if (connectionString.Length == 0)
    connectionString = CustomConnectionString;

nach:

string connectionString = ConnectionStringHelper.GetConnectionString(config);

in der SqlErrorLog (IDictionary config) Konstruktor.

Dann habe ich was RSolberg tat, aber in Application_Start im Gegensatz zu Sitzung:

Elmah.SqlErrorLog.CustomConnectionString = "Ihre CS";

Können wir in diesem Fall Datenbank-Kontext verwenden?

Ich habe ein Webapp in MVC 3 und ich eine Verbindung mit Datenbank-Kontext-Datenbank (nach obigem Beispiel):

using (var ctx = new TESTAppDB())
{
    var res = (from p in ctx.Customer select p).FirstOrDefault();
}

Wo TESTAppDB:

public class TESTAppDB: DbContext
{
    public DbSet<Customer> Customer{ get; set; }
}

Wenn ich will, in einer anderen Datenbank verbinden, so dass ich schreiben:

using (var ctx = new CERTAppDB())
{
    var res = (from p in ctx.Order select p).FirstOrDefault();
}

Es scheint korrekt zu sein ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top