ORM (объектно-реляционное отображение) не являются взаимоисключающими с хранимыми процедурами. Большинство ORM могут использовать хранимые процедуры. Большинство ORM генерируют хранимые процедуры, если вы того пожелаете. Так что проблема не в этом.
ORM могут генерировать неприемлемый SQL (с точки зрения производительности), и вам иногда может потребоваться переопределить этот SQL с помощью SQL, созданного вручную. Один из способов сделать это - использовать SP (хранимые процедуры).
В DotNet не используйте хранимые процедуры, если:
Если вы не знакомы с хранимыми процедурами (не ваш случай, но включены для полноты).
Если вы не хотите вносить слой сложности и разнообразия в ваш проект.
Вы создаете приложение, которое должно работать с разными базами данных или должно быть реплицировано на несколько серверов баз данных (это последнее ограничение может применяться только для некоторых баз данных).
Обратите внимание, что триггеры не следует сравнивать с ORM. Триггеры выполняют функции, которые не должны присутствовать в коде вашего приложения (например, регистрация или синхронизация данных между базами данных).
Некоторые люди предпочитают использовать хранимые процедуры над SQL в коде по разным причинам, таким как безопасность (например, для предотвращения внедрения SQL) и заявленная скорость. Однако, это несколько спорно и требует детального обсуждения.
Если ваш ORM не может сгенерировать хранимые процедуры, и вам нужно написать большую систему, вам нужно взвесить дополнительное ручное кодирование в зависимости от вашего случая.