首页 > 解决方案 > SQL Server 2017 - EF 正在尝试访问与连接字符串不同的数据库

问题描述

我有一个非常尴尬的情况,我不知道如何解决它。

这是详细信息。

我有三个 SQL Server 2017 实例,它们与配置了高可用性的生产数据库一起使用。

服务器是 SRV1、SRV2 和 SRV3

我有一个名为 DB1 的生产数据库,其高可用性配置如下: - SRV1 上的主节点 (r/w) - SRV2 和 SRV3 上的辅助节点 (r/o)

同样在 SRV3 上,我有一个名为 DB1_DEMO 的数据库的临时副本

我们有时会在 DB1_DEMO 中恢复生产数据,以获取新的测试数据。

我还在本地开发机器上保留了数据库的本地开发副本,也称为 DB1,我用它来刷新 EF 模型。

该应用程序使用 EF6 和 db-first 方法。当我们对数据库进行一些更改时,我们会刷新 EF 模型 (edmx)。

最近开始出现的问题如下:

即使在应用程序的暂存副本上我有正确的连接字符串(指向 SRV3 和 DB1_DEMO),当我运行一些 SP(使用 ADO.NET 或 EF)时,我也会收到以下错误:

The target database ('DB1') 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.

但是代码访问的不是数据库DB1,而是DB1_DEMO。

连接字符串清楚地指向 DB1_DEMO。

<add name="MpnModelDC" connectionString="metadata=res://*/Model.MpnModel.csdl|res://*/Model.MpnModel.ssdl|res://*/Model.MpnModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Server=SRV3;Database=DB1_DEMO;MultipleActiveResultSets=True;&quot;" providerName="System.Data.EntityClient" />

实际上,在 SRV3 上还有生产数据库 DB1 的只读/只读副本,但仅作为辅助 r/o 节点。

并且阶段应用程序中没有任何内容指向 DB1 数据库名称。

这并不是在每个 SP 上都会发生,而只是发生在其中的少数人身上。

知道发生了什么吗?

谢谢

标签: entity-frameworkhigh-availabilitysql-server-2017

解决方案


知道发生了什么吗?

这是我的猜测:您有一些代码使用 3 部分名称来引用对象。例如,DB1_DEMO 中的存储过程有如下内容:

SELECT ... FROM DB1.DBO.SOMETABLE

推荐阅读