У нас есть две базы данных, DEV и STAGING. Они по большей части идентичны. У меня есть тег настроек приложения в Web.Config, который называется «режим», и две записи строки подключения.
Если mode = DEV, я хочу использовать ConnectionString 1, в противном случае использовать ConnectionString 2. Это хорошо работает в некоторых частях приложения, но dbml, похоже, не переключает строки подключения.
Я использую эту функцию внутри класса Utilities
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
Это работает для множества хранимых процедур в этом устаревшем приложении, но dbml, похоже, всегда использует строку соединения Staging.
Когда я просматриваю свойства dbml, я вижу, что он жестко запрограммирован в строку соединения Staging, но я подумал, что переопределил это, изменив файл designer.vb для dbml следующим образом
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
Что я могу сделать, чтобы заставить dbml использовать правильную строку соединения, основанную на записи Web.config?