8

我将首先承认我在使用 SQL Server Profiler 时经常会感到困惑。

话虽如此,我决定启动它以查看通过试验数据库集的 Include 方法生成的 SQL。我正在浏览有专辑、艺术家和流派的音乐商店示例。

我注意到的一件事是,一些调用具有SQL:BatchCompleted事件类,而其他调用具有RPC:Completed事件类。似乎在 RPC 事件类下跟踪延迟加载调用。

这两个事件类之间有什么区别,为什么延迟加载会导致事件类为 RPC:Completed?

4

2 回答 2

5

BatchCompleted 表示 TSQL 代码(例如选择)已完成。RPC:Completed 表示存储过程已完成。可能是 EF 使用 sp_executesql 动态执行 SQL 代码,因此您获得 RPC:Completed。

于 2012-10-26T16:18:27.040 回答
4

这都是关于参数化的。它在没有动态参数时作为 SQL Batch 运行,在有动态参数时作为 RPC 运行。此设置允许查询计划的最佳重用。

请参阅:https ://blogs.msdn.microsoft.com/bindeshv/2010/07/12/ef-query-execution-pattern-usage-of-sp_executesql-vs-direct-execution-of-sql-statement/

于 2016-03-10T16:29:20.013 回答