SQL Server Profiler显示针对master数据库的EF查询?

时间:2011-03-22 21:09:16

标签: sql-server entity-framework sql-server-profiler

我在这里缺少什么?我在SQL Server Profiler中看到的查询都是针对master数据库的,这使得很难按数据库名称进行过滤...我应该看哪个事件或事件,以便我可以按数据库名称进行过滤。

更大的问题,到底发生了什么?

6 个答案:

答案 0 :(得分:5)

您应该从EntityFramework连接中删除此“MultipleActiveResultSets = True”

string

之后,您可以在Profiler中看到目标数据库名称,而不是master。

在我的选择中,也许ADO.NET团队想要使用MultipleActiveResultSets功能来获取

来自DB的数据,因此他们必须访问master。

MultipleActiveResultSets是关于引发一个查询而不返回其所有结果(如LINQ中的foreach语句),同时引发另一个查询以在同一会话中获取另一个数据。

默认情况下,DB不允许此行为。所以......

答案 1 :(得分:4)

我能解决这个问题,包括通过在我的连接字符串中添加应用程序名称来使MARS保持活动状态:

Data Source=database_server;Initial Catalog=MyDatabase;Trusted Connection=true;MultipleActiveResultSets=True;Application Name=MyDatabase;

然后您可以过滤应用程序名称。

答案 2 :(得分:1)

如果这是针对SQL Server 2008 R2,请在跟踪属性中的“事件选择”选项卡上,选中“显示所有列”。然后,您应该能够基于DatabaseName创建列过滤器。

我相信你必须暂停或停止追踪以进行这些更改。

答案 3 :(得分:1)

正如K Ivanov指出的那样,启用MARS(MultipleActiveResultSets)会在SQL事件探查器中将DatabaseName显示为master。通过将其设置为false,它将显示正确的DatabaseName,但是您将失去具有MultipleActiveResults的能力。

答案 4 :(得分:0)

您可以使用LoginNameHostName过滤分析器

答案 5 :(得分:0)

出于某种原因,如果我选择SP:CacheHit事件,它现在会显示针对正确数据库的查询,我可以按它进行过滤。究竟是什么事件?

相关问题