Abbiamo due database, DEV e STAGING. Sono per lo più identici. Ho un tag di impostazioni app nel Web.Config chiamarlo "mode" e due voci connectiontring.LinqToSql dbml cambia dinamicamente stringhe di connessione
Se mode = DEV, voglio utilizzare ConnectionString 1 altrimenti uso ConnectionString 2. Funziona bene in alcune parti dell'app, ma il dbml non sembra passare le stringhe di connessione. Sto usando questa funzione all'interno di una classe di utilità
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
Questo funziona per la miriade di stored procedure in questa eredità app, ma la dbml, sembra utilizzare sempre la stringa di connessione Staging.
Quando osservo le proprietà del dbml, vedo che è difficile codificato per la connectionstring Staging, ma ho pensato che stavo overridding questo cambiando il designer.vb per l'dbml come questo
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
C'è qualcosa che posso fare per forzare il dbml a usare la connessione corretta sulla base della voce Web.config?
Non uso VB per scelta. Sono un ragazzo di C#. Questa particolare app è stata codificata in VB.NET e .NET 1.1. Abbiamo proposto di riscriverlo in C# e a causa di vincoli temporali che sono stati abbattuti. :(Grazie per la risposta – Hcabnettek
Questo è il modo in cui lo faccio. – mattruma
Questo funziona magnifico !!! Ho fatto i metodi di fabbrica e aggiornato il tutto a Dim db come myDataContext = myDataContext.Create Immagino sia condiviso è simile a C# Statico come il metodo si presenta in Intellisense.Grazie per l'ottima soluzione !! – Hcabnettek