2011-03-22 39 views
2

我在这里错过了什么?我在SQL Server Profiler中看到的查询都是针对主数据库的,这使得难以根据数据库名称进行过滤......应该监视哪些事件或事件,以便我可以按数据库名称进行过滤。SQL Server Profiler显示针对主数据库的EF查询?

更大的问题,这里究竟发生了什么?

+0

你使用的是什么版本的SQL服务器?我记得在之前的一些版本中,数据库名称过滤非常奇怪。 – 2011-03-22 22:02:02

回答

5

你应该从你的EntityFramework连接

后删除此“MultipleActiveResultSets =真”,你可以看到,而不是主目标数据库名称显示在探查。

在我的选择,也许ADO.NET队想利用给这个MultipleActiveResultSets功能从DB获得

数据,所以他们需要访问主。

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

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

+0

请参阅此线程http://stackoverflow.com/questions/2971781/why-does-sql-2008-profiler-indicate-that-stored-procedure-run-如果您[选择SP:CacheHit事件](http:// stackoverflow),则从-ef4-is-in-mas – Rui 2012-11-27 04:00:23

+1

。com/a/5405628/5661968),那么数据库名称就会出现 – 2016-01-08 11:30:46

0

可以使用LoginNameHostName在探查过滤

+0

这似乎有点“hackish”......任何想法,为什么我不能只过滤数据库名称? – mattruma 2011-03-22 21:48:37

+0

你可以过滤任何列,DatabaseName与其他任何列不同?只要您能够捕获正在执行的内容并过滤出剩余的流量,我称之为解决方案 – 2011-03-22 23:45:05

+1

顺便说一句,请查看您的连接字符串中是否有MultipleActiveResultSets = True,将其设置为False可能会解决主服务器的问题数据库执行,这实际上是SQL配置文件问题,而不是EF问题 – 2011-03-22 23:48:19

1

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

我相信你必须暂停或停止跟踪才能进行这些更改。

0

由于某些原因,如果我选择SP:CacheHit事件,它现在会显示针对正确数据库的查询,并且可以通过它进行筛选。那是什么事?

1

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

3

我能解决这个问题,包括让MARS积极通过添加应用程序的名字我的连接字符串:

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

然后你就可以在应用程序的名称进行筛选。