Tenemos dos bases de datos, DEV y STAGING. Son en su mayor parte idénticos. Tengo una etiqueta de configuración de la aplicación en Web.Config llámala "modo" y dos entradas de la conexión.LinqToSql dbml conmuta dinámicamente connectionstring
Si modo = DEV Quiero usar ConnectionString 1; de lo contrario, uso ConnectionString 2. Esto funciona bien en algunas partes de la aplicación, pero el dbml no parece estar cambiando las cadenas de conexión. estoy usando esta función dentro de una clase Utilidades
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
Esto funciona para la gran cantidad de procedimientos almacenados en esta aplicación legado, pero el dbml, parece que utilizar siempre la cadena de conexión de puesta en escena.
Cuando ver las propiedades de la dbml, veo que es difícil codificado a la connectionstring Staging, pero pensé que estaba overridding esto cambiando la designer.vb para la dbml como este
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
¿Hay algo que pueda hacer para obligar al dbml a utilizar la conexión correcta basada en la entrada Web.config?
No utilizo VB por elección. Soy un chico C#. Esta aplicación en particular fue codificada en VB.NET y .NET 1.1. Propusimos reescribirlo en C# y debido a restricciones de tiempo que fueron derribadas. :(Gracias por su respuesta – Hcabnettek
Así es como lo hago. – mattruma
Esto funciona excelente! Fui a los métodos de fábrica y actualicé todo a Dim db como myDataContext = myDataContext.Create Supongo que compartir es similar a C# estático como el método se muestra en Intellisense. Gracias por la gran solución! – Hcabnettek