【问题标题】:Connection string for entity framework to connect to SQL High Availability servers实体框架连接到 SQL 高可用性服务器的连接字符串
【发布时间】:2014-11-07 06:52:29
【问题描述】:

我正在使用实体框架开发应用程序。在此应用程序中,目标数据库是具有两个成员的 SQL 2012 高可用性集群服务器。一个配置为主,另一个配置为辅助。

尝试使用 SQL Management Studio 连接到集群没问题。我可以做查询和一切。问题是当我尝试将它与我的应用程序连接时。它会抛出异常消息:

The target database ('UserDatabase') is in an availability group and is currently accessible for connections when the application intent is set to read only. For more information about application intent, see SQL Server Books Online.

检查更多,当实体框架试图打开与数据库的连接时抛出异常。

这是我正在使用的连接字符串:

data source=SQLCL01;initial catalog=UserDatabase;user id=test-user;password=##pass##;MultipleActiveResultSets=True

因为我知道我可以使用 SQL Management Studio 完美地连接相同的凭据,所以我想知道问题是否出在我的连接字符串上。有人有类似经历吗?

更新: SQLCL01 是一个监听器。数据库实例名称为 SQLDB01 & SQLDB02

【问题讨论】:

    标签: .net entity-framework sql-server-2012 high-availability alwayson


    【解决方案1】:

    我相信您尝试连接时的 SQLCL01 正在作为辅助角色运行。为了连接到辅助副本,您需要将 AG 配置为允许可读辅助副本连接,并且您的连接字符串必须通过添加明确声明连接具有只读意图:ApplicationIntent=ReadOnly

    或者,您可以在“数据源”中使用侦听器名称。这是一个始终指向当前主节点的网络名称。这需要在 AG 中设置。如需更多信息,请查看: http://msdn.microsoft.com/en-us/library/hh213417.aspx

    【讨论】:

    • 其实SQLCL01是一个监听器。数据库名称都是:SQLDB01 和 SQLDB02,所以是的,这是一个侦听器。
    • 如果将 ApplicationIntent 添加到连接字符串会发生什么?
    • 通过添加:ApplicationIntent=ReadOnly 我可以访问应用程序,但是实体框架会出现另一个异常,因为我也使用它来编写。
    • 然后试试 ApplicationIntent=ReadWrite
    【解决方案2】:

    尝试使用:

    <b>server=tcp:</b>SQLCL01;initial catalog=UserDatabase;user id=test-user;password=##pass##;MultipleActiveResultSets=True
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 2011-11-04
      • 1970-01-01
      相关资源
      最近更新 更多