如何从地理复制的辅助数据库中读取数据?

3
我有一个Azure SQL(S3)地理复制只读数据库。 我的问题是,当我从VisualStudio查询只读数据库时,我可以看到查询命中主数据库。 我希望查询命中只读数据库。
但是,如果我使用SMSM连接到只读数据库运行相同的查询,我可以看到只读数据库被命中。这符合预期。
为了查看每个数据库中的最后一个查询,我使用以下SQL。
SELECT execquery.last_execution_time AS [Date Time], execsql.text AS [Script] FROM sys.dm_exec_query_stats AS execquery CROSS APPLY sys.dm_exec_sql_text(execquery.sql_handle) AS execsql ORDER BY execquery.last_execution_time DESC
问题:
为什么我的C#(entityframework 6.0)代码没有显示在只读数据库中?
背景:
目标是拥有一个只读SQL来处理外部API负载,以便主SQL不要过载。
在Azure门户中,我创建了与主数据库位于同一区域的地理复制SQL。
连接字符串设置为只读数据库。我尝试使用[ApplicationIntent = ReadOnly]标志在连接字符串中,但没有成功。

1
在每种情况下,您使用什么连接字符串?什么是SSMS设置?正是连接字符串指定要访问的数据库,而不是查询。就Azure SQL而言,SSMS并没有做任何不同的事情,它只是另一个客户端应用程序。 - Panagiotis Kanavos
1
确保EF使用的连接字符串是你想要的。也许你正在使用一个不包含ApplicationIntent=ReadOnly;的连接。你是直接从配置文件中读取连接字符串还是之后修改它呢? - Panagiotis Kanavos
1
我再重复一遍,SSMS只是一个客户端工具。你仍然没有发布你的代码。从一个简单的控制台应用程序开始,只使用ADO.NET连接到副本 - 一个单独的SqlConnection,一个单独的SqlCommand。不要试图找到最后一个查询,而是使用文档中显示的实际确定数据库是否可更新的方法:SELECT DATABASEPROPERTYEX(DB_NAME(),'Updateability'),使用SqlCommand.ExecuteScalar - Panagiotis Kanavos
谢谢!我想我解决了这个问题。你是正确的,连接字符串是问题所在。为了获取正确的连接字符串,我使用了VS中的“Cloud Explorer”和“Server Explorer”连接到Azure Readonly SQL。然后我可以在VS中看到完整的连接字符串。我复制了它,现在它可以工作了。与我的旧连接字符串有一些小差异。 - Henrik
connectionString="Data Source=readonlyserver.database.windows.net;Initial Catalog=database;User ID=user;Password=xxxxx;Connect Timeout=60;Encrypt=True;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" - 这个连接字符串对我有效。 - Henrik
显示剩余3条评论
1个回答

1
问题出在连接字符串的旧格式上,即“User ID”。我使用了“username@server”的格式。其中的“@server”指向了Master Sql服务器。我改为只使用“username”,现在可以正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接