LinqToSql dbml dynamisch wechseln connectionstring
Wir haben zwei Datenbanken, DEV und STAGING. Sie sind zum größten Teil identisch. Ich habe eine app-Einstellungen-tag in der Web.Config nennen es "mode", und zwei connectionstring-Einträge.
Wenn Modus=DEV möchte ich ConnectionString 1 anderweitig zu verwenden ConnectionString-2. Dies funktioniert gut in einigen teilen der app, aber die dbml scheint es nicht zu sein, schalten Sie die Verbindungszeichenfolgen.
Ich benutze diese Funktion in einem Utilities-Klasse
Public Function GetConnectionString() As String
Dim connectionStringToGet = String.Empty
Select Case GetCurrentApplicationMode()
Case "DEV"
connectionStringToGet = "Dev"
Case "STAG"
connectionStringToGet = "Staging"
Case "PROD"
connectionStringToGet = "Production"
End Select
Return ConfigurationManager.ConnectionStrings(connectionStringToGet).ConnectionString
End Function
Diese Werke für die Vielzahl von gespeicherten Prozeduren in diesem legacy-app, aber die dbml, scheint immer die Staging-Verbindungszeichenfolge.
Wenn ich die Eigenschaften der dbml, sehe ich, dass es hart codiert, um die Staging-connectionstring, aber ich dachte, ich war overridding dies, indem Sie den designer.vb für die dbml wie diese
Public Sub New()
MyBase.New(Utilities.GetConnectionString(), mappingSource)
OnCreated
End Sub
Public Sub New(ByVal connection As String)
MyBase.New(connection, mappingSource)
OnCreated
End Sub
Public Sub New(ByVal connection As System.Data.IDbConnection)
MyBase.New(connection, mappingSource)
OnCreated
End Sub
Public Sub New(ByVal connection As String, ByVal mappingSource As System.Data.Linq.Mapping.MappingSource)
MyBase.New(connection, mappingSource)
OnCreated
End Sub
Public Sub New(ByVal connection As System.Data.IDbConnection, ByVal mappingSource As System.Data.Linq.Mapping.MappingSource)
MyBase.New(connection, mappingSource)
OnCreated
End Sub
Gibt es irgendetwas, was ich tun kann, um die Kraft der dbml-mit den richtigen connectionstring basierend auf dem Web.config Eintrag?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Würde ich eine factory-Methode in einer partiellen Klasse, die für den DataContext. Beachten Sie, dass Sie eine Verbindungszeichenfolge für eine DataContext-unterscheidet sich von einem regulären ADO.NET connection string.
Code.... Ich habe noch nie verwendet VB.NET aber es sollte so etwas wie dieses:
Verwenden, anstatt mit Neue MyDataContext().
Alternativ könnte man nennen
überall Sie erhalten eine neue Instanz, aber ich bevorzuge die factory-Methode.
Die grundlegende Idee ist die gleiche wie Ihre Unterklassen, aber ohne die Notwendigkeit für eine verwirrende extra-Klasse name. Partielle Klassen sind sehr nützlich, wenn es darum geht Entity Framework (oder code generation tools). Sie können hinzufügen, business-logic-Methoden, um Ihre Entity Framework generierten Klassen, etc.
Mir gefällt diese Lösung besser. Sie können die .dbml designer nicht, um das setup eine default-Konstruktor, dann verwenden Sie eine partielle Klasse zu erstellen, die default-Konstruktor.
http://blogs.msdn.com/b/jongallant/archive/2007/11/25/linq-and-web-application-connection-strings.aspx