L'uso di stored procedure è un modo ed è stato ampiamente utilizzato per molti anni.
Un modo più moderno di interagire con i database di SQL Server da C # (o qualsiasi linguaggio .NET) consiste nell'utilizzare Entity Framework. Il vantaggio di Entity Framework è che fornisce un livello più elevato di astrazione.
Per citare da Microsoft ( https://msdn.microsoft.com/en-us/data/jj590134 ):
ADO.NET Entity Framework consente agli sviluppatori di creare applicazioni di accesso ai dati programmando su un modello di applicazione concettuale 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 un modello concettuale più incentrato sull'applicazione, inclusi tipi con ereditarietà, membri complessi e relazioni.
- Le applicazioni vengono liberate da dipendenze codificate su un determinato motore di dati o schema di archiviazione.
- Le mappature tra il modello concettuale e lo schema specifico di archiviazione possono cambiare senza cambiare il codice dell'applicazione.
- Gli sviluppatori possono lavorare con un modello a oggetti di applicazione coerente che può essere mappato a vari schemi di archiviazione, eventualmente implementati in diversi sistemi di gestione del database.
- Più modelli concettuali possono essere associati a un singolo schema di archiviazione.
- Il supporto per le query integrate nella lingua (LINQ) fornisce la convalida della sintassi in fase di compilazione per le query rispetto a un modello concettuale.
L'uso di un ORM vs Stored procedure comporta compromessi, in particolare in termini di sicurezza e in cui risiede la logica.
L'approccio "classico" allo sviluppo con SQL Server consiste nel far sì che la logica dell'applicazione risieda nelle procedure e nei programmi memorizzati solo ai diritti di sicurezza per eseguire le procedure memorizzate, non all'aggiornamento diretto delle tabelle. Il concetto qui è che le stored procedure sono il livello di logica aziendale per le applicazioni. Sebbene la teoria sia valida, tende a sfuggire al favore per vari motivi, sostituendosi con l'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 hanno maggiori probabilità di seguire uno schema come MVC.
Un aspetto negativo dell'implementazione della logica nell'ORM piuttosto che nel database è la facilità di debug e test delle 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 unità di lavoro atomica, in altre parole inserita in una transazione. Se questo tipo di trasferimento può essere eseguito solo attraverso una procedura memorizzata, è relativamente facile per il procuratore generale e gli auditor eseguire la procedura memorizzata.
Se d'altra parte ciò avviene 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 debug può essere molto più complesso, in particolare se sono potenzialmente coinvolti più programmi. Questo sarebbe molto probabilmente un caso limite, che potrebbe comportare particolari problemi hardware che devono verificarsi in una sequenza particolare, ecc. Come si fa a testarlo?