Forse ha senso, invertire la domanda e trovare casi in cui solo le stored procedure potrebbero fare, cosa si desidera ottenere. Forse ci sono davvero casi d'uso, in cui spiccano le procedure memorizzate.
Se fa la differenza, sto usando MSSQL ed Entity Framework.
La mia conoscenza di EF è limitata, ma per quanto posso vedere, EF è ( solo ) un ORM come un altro; e fortunatamente è in grado di usare il raw SQL .
Se prendo i tuoi due punti principali:
Un rapporto complicato che richiedeva minuti per essere eseguito (questa era una pagina in un'app Web). Ho scoperto di poter scrivere SQL molto più efficiente (impiegando solo pochi secondi per l'esecuzione) rispetto a quello che LINQ stava fornendo.
LINQ / EF non era all'altezza, quando si faceva una relazione. E come hai notato, è stato SQL
molto più veloce rispetto all'utilizzo di un ORM. Ma parla a favore delle stored procedure o solo contro l'utilizzo dell'ORM per tutto?
Il tuo problema potrebbe ovviamente essere risolto con SQL . Se quella query è stata archiviata e la versione controllata nella tua base di codice fa - secondo il tuo esempio - almeno nessuna differenza .
Un'applicazione Web doveva leggere e scrivere su alcune tabelle in un database separato che conteneva molte altre informazioni sensibili che erano irrilevanti per l'applicazione. Invece di dargli accesso a tutto, ho usato una procedura memorizzata che fa solo ciò che è necessario e restituisce solo informazioni limitate. L'applicazione web potrebbe quindi avere accesso solo a questa procedura memorizzata, senza accesso a tabelle ecc.
Stessa cosa qui: una semplice stringa di connessione e e AGGIORNAMENTO e il problema è stato risolto. Questo problema potrebbe essere risolto anche con un ORM :
è sufficiente usare un webservice di fronte all'altro DB e la stessa compartementalization / isolamento viene ottenuto.
Quindi niente da vedere qui.
Osservando alcuni punti che altri hanno fatto:
Hai unità di lavoro complesse, che coinvolgono forse molte tabelle, che non possono essere facilmente inserite in una transazione utilizzando le funzionalità di EF.
Ma SQL
può farlo. Nessuna magia coinvolta qui.
Il tuo database non funziona bene con EF
Ancora: usa EF quando appropriato.
È necessario lavorare con i dati che attraversano i confini del server con i server collegati
Non vedo come le procedure memorizzate siano di aiuto. Quindi non riesco a vedere un vantaggio delle stored procedure; ma forse qualcuno fa luce su questo.
Esistono scenari di recupero dei dati molto complessi in cui è necessario SQL "bare metal" per garantire prestazioni adeguate
Ancora: "Confini di EF ".
L'applicazione non dispone di autorizzazioni CRUD complete su una tabella ma l'applicazione può essere eseguita in un contesto di sicurezza attendibile dal server
Va bene. Vado con un forse .
Finora solo mezzo punto è stato fatto a favore delle stored procedure.
Forse ci sono considerazioni sulle prestazioni, che parlano a favore delle stored procedure.
1) La memorizzazione delle query ha il vantaggio di una semplice chiamata alla procedura memorizzata che incapsula la complessità. Poiché il piano di query conosce la query, è "più facile" da ottimizzare. Ma i salvataggi sono con l'attuale sofisticato planer di query _minimal.
Inoltre, anche se le query ad hoc comportano un leggero costo , se i dati sono ben strutturati e accuratamente indicizzati, il database è semplicemente il collo di bottiglia dell'applicazione. Quindi, anche se c'è un piccolo delta, è trascurabile considerando altri fattori.
2) Tuttavia è stato discusso per la memorizzazione di query complesse in un DB. Ci sono due cose da considerare:
a) query complesse fanno un uso massiccio dell'infrastruttura DB, che aumenta i tempi di risposta per ogni altra query. Non è possibile eseguire molte query costose in parallelo . Questo parla né pro né contra stored procedure, ma contro complesse query.
b) Se la query richiede comunque tempo, perché preoccuparsi delle piccole vittorie di una procedura memorizzata.
tl; dr
Nulla parla direttamente contro le procedure memorizzate. Quindi usare le procedure memorizzate va bene - se ti rende felice.
Ma d'altra parte: non potrei immaginare un caso d'uso corretto che parli inequivocabilmente pro.
Quando dovrei usare le stored procedure?
La risposta corretta è: ogni volta che vuoi . Ma ci sono altre opzioni.