我将是第一个承认我在使用SQL Server分析器时经常感到困惑的人。
话虽如此,我决定通过尝试使用Db Set的Include方法来查看正在生成的SQL。我正在浏览音乐商店的例子,那里有专辑,艺术家和流派。
我注意到的一件事是,某些调用的事件类为 SQL:BatchCompleted ,而其他调用的事件类为 RPC:已完成。似乎在RPC事件类下跟踪了延迟加载调用。
这两个事件类之间有什么区别?为什么延迟加载导致RPC的事件类:已完成?
答案 0 :(得分:5)
BatchCompleted表示TSQL代码(例如,选择)已完成。 RPC:已完成表示存储过程已完成。 可能是EF使用sp_executesql以动态方式执行SQL代码,因此您获得了RPC:Completed。
答案 1 :(得分:4)
一切都与参数化有关。当没有动态参数时,它作为SQL Batch运行,并且当存在时作为RPC运行。此设置允许最佳地重用查询计划。