Я предпочитаю LINQ, проверяя запросы, полученные с помощью такого инструмента, как EF Profiler.Если какие-либо сгенерированные запросы слишком длинные или создают N + 1, их обычно можно исправить.Находясь в производстве, я слежу за статистикой, и если медленный запрос не может быть исправлен с помощью кэширования, я переместу его в хранимую процедуру.
Основные преимущества выполнения ваших запросов в linq:
- Простое управление исходным кодом и развертывание изменений запросов
- Запросы компилируются, поэтому если вы меняете / переименовываете что-то, вы знаете, что вы что-то сломали
- Может ли модульное тестирование ваших запросов(вероятно, есть способы сделать это с сохраненными процессами, но я не видел, чтобы кто-нибудь делал это)
- Может легко отследить, где используются запросы, и удалить те, которые больше не требуются
Когда я присоединился к любому проекту, в котором есть много сохраненных процедур, часто их не используют (или, вероятно, не используют), но никто не решается удалить их, поскольку никто не уверен.
Единственный раз, когда я начал бы с хранимых процедур, это если бы я работал в корпоративной среде, где доступ к базе данных был ограничен таким образом, что мне пришлось.