J'utilise le micro-ORM PetaPoco. Il est en effet très facile et sécurisé de travailler avec des bases de données à l'aide d'outils ORM, mais la seule chose que je déteste est le code supplémentaire. J'avais l'habitude de mettre la plupart du code dans la base de données elle-même et d'utiliser toutes les fonctionnalités du SGBDR comme les procédures stockées, les déclencheurs, etc., qu'il est conçu pour mieux gérer.
Je veux savoir quand ne pas utiliser ORM sur les procédures / déclencheurs stockés et vice-versa.
Réponses:
Les ORM (mappage relationnel-objet) ne s'excluent pas mutuellement avec les procédures stockées. La plupart des ORM peuvent utiliser des procédures stockées. La plupart des ORM génèrent des procédures stockées si vous le souhaitez. Donc, le problème n'est pas non plus ou.
Les ORM peuvent générer du SQL inacceptable (en termes de performances) et vous pouvez parfois vouloir remplacer ce SQL par du SQL fabriqué à la main. L'une des façons d'y parvenir consiste à utiliser des SP (procédures stockées).
Dans DotNet, n'utilisez pas de procédures stockées si:
Si vous n'êtes pas familier avec les procédures stockées (pas votre cas, mais inclus pour être complet).
Si vous ne voulez pas introduire une couche de complexité et de versification à votre projet.
Vous créez une application qui devrait fonctionner avec différentes bases de données ou qui devrait être répliquée sur plusieurs serveurs de base de données (cette dernière restriction peut s'appliquer à certaines bases de données uniquement).
Notez que les déclencheurs ne doivent pas être comparés aux ORM. Les déclencheurs exécutent des fonctions qui ne devraient pas figurer dans le code de votre application (telles que la journalisation ou la synchronisation des données entre les bases de données).
Certaines personnes préfèrent l'utilisation de procédures stockées à SQL dans le code pour différentes raisons telles que la sécurité (par exemple pour empêcher l'injection SQL) et pour leur vitesse revendiquée. Cependant, ceci est quelque peu discutable et nécessite une discussion détaillée.
Si votre ORM ne peut pas générer de procédures stockées et que vous devez écrire un grand système, vous devez peser le codage manuel supplémentaire en fonction de votre cas.
la source
Les ORM supposent souvent que la base de données existe pour servir l'ORM. Mais généralement, la base de données existe pour servir la société, qui peut avoir des centaines et des centaines d'applications écrites dans plusieurs langues.
Mais ce n'est qu'un cas de "ORM vs procédures stockées" si vous utilisez un ORM qui ne peut pas appeler une procédure stockée. Sinon, il s'agit de décider où coder la logique métier.
Où que vous codiez la logique métier, son travail consiste à s'assurer que la base de données passe d'un état cohérent à un autre état cohérent, quelle que soit l'application qui effectue le changement . Vous n'avez donc vraiment que deux choix pratiques: coder une fois dans la base de données ou coder une fois dans une couche d'accès aux données "impénétrable".
Méfiez-vous de l'interface de ligne de commande dbms si vous utilisez un DAL "impénétrable".
la source
Requête simple -> ORM
Requête complexe -> Procédure stockée
la source
Le déclencheur doit être utilisé comme invariant d'enregistrement ou se composer de règles commerciales vitales, à mon humble avis.
Les problèmes des ormes:
la source
Être en désaccord. La requête ORM n'est plus simple que si vous connaissez mieux ORM que vous ne connaissez SQL. ORM se traduit par beaucoup plus de code, beaucoup plus difficile à maintenir IMO. Les seules personnes qui bénéficient de l'ORM sont les actionnaires de la société qui vend l'ORM (par exemple Microsoft).
la source