ORMs (mapeamento objeto-relacional) não são mutuamente exclusivos com procedimentos armazenados. A maioria dos ORMs pode utilizar procedimentos armazenados. A maioria dos ORMs gera procedimentos armazenados, se você preferir. Portanto, a questão não é ou.
Os ORMs podem gerar SQL inaceitável (em termos de desempenho) e, às vezes, você pode substituir esse SQL pelo SQL artesanal. Uma das maneiras de conseguir isso é usando SPs (procedimentos armazenados).
No DotNet, não use procedimentos armazenados se:
Se você não estiver familiarizado com os procedimentos armazenados (não é o seu caso, mas incluídos para fins completos).
Se você não quiser introduzir uma camada de complexidade e versatilidade ao seu projeto.
Você está criando um aplicativo que deve funcionar com bancos de dados diferentes ou que precisaria ser replicado em vários servidores de banco de dados (essa última restrição pode ser aplicada apenas a alguns bancos de dados).
Observe que os gatilhos não devem ser comparados com ORMs. Os gatilhos executam funções que não são melhores no código do aplicativo (como registrar ou sincronizar dados nos bancos de dados).
Algumas pessoas preferem o uso de procedimentos armazenados em vez de SQL no código por diferentes razões, como segurança (por exemplo, para impedir a injeção de SQL) e pela velocidade reivindicada. No entanto, isso é um tanto discutível e precisa de discussão detalhada.
Se o seu ORM não puder gerar procedimentos armazenados e você precisar escrever um sistema grande, será necessário ponderar a codificação manual extra com base no seu caso.