Я не знаю, как именно EfProf работает внутри, но EF расширяем в виде пользовательских провайдеров - используя нестандартного провайдера, вы можете обернуть существующего провайдера (например, SQL Server) и проверить весь трафик - это позволяет выполнять профилирование.Эта статья посвящена этой теме: Оболочки провайдеров трассировки и кэширования для Entity Framework - здесь приведен пример кода.
Всякий раз, когда вы запускаете запрос LINQ или Entity SQL через экземпляр ObjectContext,запрос проходит через ряд слоев (см. рисунок ниже).На высоком уровне мы можем сказать, что все запросы и обновления из ObjectContext транслируются и выполняются через EntityConnection, который, в свою очередь, обращается к провайдеру данных, специфичному для сервера, такому как SqlClient или клиент Sql Server CE.
Интерфейс провайдера, используемый EntityFramework является наращиваемым, что означает, что можно написать провайдера, который обернет другого провайдера и перехватит связь между Entity Framework и исходным провайдером.
Провайдер-обертка получает возможность делать интересные вещи, такие как:
Проверка деревьев запросов и команд перед их выполнением
Управление соединениями, командами, транзакциями, считывателями данных