L'utilisation de procédures stockées est un moyen et est largement utilisé depuis de nombreuses années.
Une façon plus moderne d'interagir avec les bases de données SQL Server à partir de C # (ou de tout langage .NET) consiste à utiliser Entity Framework. L'avantage d'Entity Framework est qu'il fournit un niveau d'abstraction plus élevé.
Pour citer Microsoft ( https://msdn.microsoft.com/en-us/data/jj590134 ):
ADO.NET Entity Framework permet aux développeurs de créer des applications d'accès aux données en programmant avec un modèle d'application conceptuel au lieu de programmer directement avec un schéma de stockage relationnel. L'objectif est de réduire la quantité de code et de maintenance requise pour les applications orientées données. Les applications Entity Framework offrent les avantages suivants:
- Les applications peuvent fonctionner en termes d'un modèle conceptuel plus axé sur les applications, y compris les types avec héritage, les membres complexes et les relations.
- Les applications sont libérées des dépendances codées en dur sur un moteur de données ou un schéma de stockage particulier.
- Les mappages entre le modèle conceptuel et le schéma spécifique au stockage peuvent changer sans changer le code d'application.
- Les développeurs peuvent travailler avec un modèle objet d'application cohérent qui peut être mappé à différents schémas de stockage, éventuellement implémentés dans différents systèmes de gestion de base de données.
- Plusieurs modèles conceptuels peuvent être mappés sur un seul schéma de stockage.
- La prise en charge des requêtes intégrées au langage (LINQ) fournit une validation de la syntaxe au moment de la compilation pour les requêtes par rapport à un modèle conceptuel.
L'utilisation d'un ORM vs procédures stockées implique des compromis, en particulier en termes de sécurité et où réside la logique.
L'approche «classique» du développement avec SQL Server consiste à faire en sorte que la logique d'application réside dans les procédures stockées et les programmes uniquement dotés de droits de sécurité pour exécuter les procédures stockées, et non pour mettre à jour les tables directement. Le concept ici est que les procédures stockées sont la couche de logique métier pour les applications. Bien que la théorie soit solide, elle a eu tendance à tomber en disgrâce pour diverses raisons, étant remplacée par la mise en œuvre de la logique métier dans un langage de programmation comme C # ou VB. Les bonnes applications sont toujours mises en œuvre avec une approche à plusieurs niveaux, y compris la séparation des préoccupations, etc., mais sont plus susceptibles de suivre un modèle comme MVC.
Un inconvénient de l'implémentation de la logique dans l'ORM plutôt que dans la base de données est la facilité de débogage et de test des règles d'intégrité des données par les responsables de la base de données (DA ou DBA). Prenons l'exemple classique du transfert d'argent de votre chèque vers votre compte d'épargne, il est important que cela se fasse comme une unité de travail atomique, en d'autres termes pris en sandwich dans une transaction. Si ce type de transfert n'est autorisé que par le biais d'une procédure stockée, il est relativement facile pour le DA et les auditeurs de contrôler la qualité de la procédure stockée.
Si, d'autre part, cela se fait via un ORM comme Entity Framework et en production, on découvre que, dans de rares occasions, l'argent est retiré de la vérification mais non investi dans le débogage des économies peut être beaucoup plus complexe, en particulier si plusieurs programmes sont potentiellement impliqués. Ce serait très probablement un cas de bord, impliquant peut-être des problèmes matériels particuliers qui doivent se produire dans une séquence particulière, etc. Comment peut-on tester cela?