加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

linq-to-sql – LinqToSql dbml动态切换连接字符串

发布时间:2020-12-12 08:58:26 所属栏目:MsSql教程 来源:网络整理
导读:我们有两个数据库,DEV和STAGING.它们大部分是相同的.我在Web.Config中有一个app settings标签,称之为“mode”,还有两个连接字符串条目. 如果mode = DEV我想使用ConnectionString 1,否则使用ConnectionString 2.这在应用程序的某些部分工作正常,但dbml似乎没有
我们有两个数据库,DEV和STAGING.它们大部分是相同的.我在Web.Config中有一个app settings标签,称之为“mode”,还有两个连接字符串条目.

如果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 connectionstring,但我认为我通过更改dbml的designer.vb来覆盖它

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,mappingSource)
    OnCreated
End Sub

有什么办法可以强制dbml根据Web.config条目使用正确的连接字符串吗?

解决方法

我将在DataContext的分部类中使用工厂方法.请记住,DataContext的连接字符串与常规ADO.NET连接字符串不同.

代码….我从未使用过VB.NET,但它应该是这样的:

Partial Public Class MyDataContext

    ' GetConnectionString code here
    '

    Public Shared Function Create() As MyDataContext
        Return New MyDataContext(GetConnectionString())
    End Function
End Class

使用它而不是使用New MyDataContext().

或者,你可以打电话

dc = New MyDataContext(GetConnectionString())

到处都有新实例,但我更喜欢工厂方法.

基本思想与子类化相同,但不需要令人困惑的额外类名.部分类在实体框架(或任何代码生成工具)方面非常有用.您可以将业务逻辑方法添加到Entity Framework生成的类等.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读