L'uso delle stored procedure è a senso unico ed è stato ampiamente utilizzato da molti anni.
Un modo più moderno per interagire con i database di SQL Server da C # (o qualsiasi linguaggio .NET) è utilizzare Entity Framework. Il vantaggio di Entity Framework è che fornisce un livello più alto di astrazione.
Per citare da Microsoft ( link ):
Il Entity Framework di ADO.NET consente agli sviluppatori di creare applicazioni di accesso ai dati programmando su un modello concettuale di applicazione invece di programmare direttamente su uno schema di archiviazione relazionale. L'obiettivo è ridurre la quantità di codice e manutenzione richiesta per le applicazioni orientate ai dati. Le applicazioni Entity Framework offrono i seguenti vantaggi:
- Le applicazioni possono funzionare in termini di più incentrati sull'applicazione
modello concettuale, compresi i tipi con ereditarietà, membri complessi,
e relazioni.
- Le applicazioni vengono liberate da dipendenze codificate su un particolare
motore di dati o schema di archiviazione.
- Mappature tra il modello concettuale e lo schema specifico dello storage
può cambiare senza cambiare il codice dell'applicazione.
- Gli sviluppatori possono lavorare con un modello di oggetto dell'applicazione coerente
può essere mappato a vari schemi di archiviazione, eventualmente implementati in
diversi sistemi di gestione del database.
- È possibile associare più modelli concettuali a un singolo schema di archiviazione.
- Supporto della query integrata nella lingua (LINQ) fornisce la sintassi in fase di compilazione
validazione per query su un modello concettuale.
L'uso di un ORM rispetto a stored procedure comporta compromessi, in particolare in termini di sicurezza e dove risiede la logica.
L'approccio "classico" allo sviluppo con SQL Server consiste nel far sì che la logica dell'applicazione risieda nelle stored procedure e programmi solo dati i diritti di sicurezza per eseguire stored procedure, non aggiornare direttamente le tabelle. Il concetto qui è che le stored procedure sono il livello della logica aziendale per le applicazioni. Sebbene la teoria sia valida, ha avuto la tendenza a non essere apprezzata per vari motivi, sostituita dall'implementazione della logica di business in un linguaggio di programmazione come C # o VB. Le buone applicazioni sono ancora implementate con un approccio a più livelli, inclusa la separazione delle preoccupazioni ecc. Ma sono più propensi a seguire un modello come MVC.
Uno svantaggio della logica di implementazione nell'ORM piuttosto che il database è la facilità di eseguire il debug e testare le regole di integrità dei dati da parte dei responsabili del database (DA o DBA). Prendiamo il classico esempio di trasferimento di denaro dal conto corrente al conto di risparmio, è importante che ciò avvenga come un'unità di lavoro atomica, in altre parole inserita in una transazione. Se questo tipo di trasferimento è consentito solo attraverso una procedura memorizzata, è relativamente facile per il DA e i revisori di QA la procedura memorizzata.
Se d'altra parte questo viene fatto tramite un ORM come Entity Framework e nella produzione si scopre che in rare occasioni il denaro viene prelevato dal controllo ma non messo nel risparmio, il debugging può essere molto più complesso, in particolare se più programmi sono potenzialmente coinvolti. Probabilmente si tratta di un caso limite, che potrebbe comportare problemi hardware particolari che devono verificarsi in una particolare sequenza, ecc. Come si fa a testare questo?