EF использует отражение.Я не проверял это, я думаю, что это основной момент отображения при материализации экземпляра сущности из записи базы данных.Вы скажете, что такое имя столбца и как называется свойство, и когда выполняется программа чтения данных, вы должны каким-то образом заполнить свойство, которое вы знаете только по его имени.
Я считаю, что все эти "показатели производительностиПодобные "проблемы решаются правильно путем кэширования необходимой информации для отображенияВлияние производительности, вызванное отражением, вероятно, будет ничем по сравнению с сетевым взаимодействием с сервером, выполнением сложного запроса и т. Д.
Если мы говорим о производительности EF, проверьте эти два документа: Часть 1 и Ч.2 .В нем описывается некоторая причина, почему люди иногда думают, что EF очень медленный.
Являются ли хранимые процедуры быстрее, чем запросы EF?Мой ответ: я так не думаю.Основным преимуществом linq является то, что вы можете создать свой запрос в приложении.Это очень удобно, когда вам нужно что-то вроде фильтрации списка, разбиения по страницам и сортировки + изменения количества отображаемых столбцов, загрузки объектов с реализацией и т. Д. Если вы хотите реализовать это в хранимой процедуре, у вас будет или десятки процедур для различных конфигураций запросов, или выбудет использовать динамический sql.Динамический sql - это именно то, что использует EF.Но в случае EF этот запрос имеет проверку времени компиляции, что не относится к простому SQL.Единственное различие в производительности - это объем передаваемых данных при отправке всего запроса на сервер и при отправке только процедур и параметров exec.
Это правда, что запросы иногда очень странные.Особенно наследование порождает иногда плохие запросы.Но это уже решено.Вы всегда можете использовать пользовательскую хранимую процедуру или запрос SQL для возврата объектов, сложных типов или пользовательских типов.EF материализует результаты для вас, поэтому вам не нужно беспокоиться о читателях данных и т. Д.
Если вы хотите быть объективными при представлении Entity Framework, вы должны также упомянуть о его минусах.Entity Framework не поддерживает пакетную обработку команд.Если вам нужно обновить или вставить несколько объектов, каждая команда sql имеет свой собственный обходной путь к базе данных.Из-за этого вы не должны использовать EF для переноса данных и т. Д. Еще одна проблема с EF - это отсутствие зацепок за расширяемость.