Большинство ORM (включая LINQ-to-SQL и EF) предлагают вам выбор либо автоматизированных CRUD, либо хранимых процедур.
Например, хотя я с удовольствием разрешу ORM решать простые однородные проблемы CRUD (вставка простых записей и т. Д.), Если у меня есть критический метод поиска, который охватывает сложные данные нетривиальными способами, я мог бы выбрать используйте UDF (или SP), чтобы я мог профилировать его, настраивать и т. д. правильно.
В некоторых сценариях существуют проблемы безопасности / аудита, которые препятствуют прямому CRUD, но в большинстве случаев с участием сервера приложений это искусственная проблема: если хакер уже проник в ваш сервер приложений, у вас уже есть серьезные проблемы - и если они знают схему, они часто могут использовать SP, чтобы нанести столько же урона.
Если вы используете один и тот же бэкэнд из нескольких приложений на разных технологиях, тогда SP также полезны.
Многие из оригинальных дебатов о производительности, связанных с SP и текстовыми командами, в настоящее время в значительной степени спорны; правильно параметризованный текстовый запрос может использовать кеш запросов, безопасен для инъекций и т. д.