Approche SQL traditionnelle VS ORM

c# dapper entity-framework orm sql

Question

Je suis vraiment frustré de chercher dans cette réponse ce qui est mieux - l'approche traditionnelle System.Data.SqlClient ou l'utilisation d'un ORM tel que EF ou Dapper J'ai vu beaucoup de comparaisons à travers de nombreux liens, certains sont:

  1. https://github.com/StackExchange/dapper-dot-net entrer la description de l'image ici

  2. http://www.dontpaniclabs.com/blog/post/2014/05/01/speed-comparison-dapper-vs-entity-framework/

  3. ORM vs requête de base de données traditionnelle, quels sont leurs champs?

Une chose que je peux comprendre, le code SQL traditionnel écrit à la main est plus performant que toute autre approche. mais je pense toujours que si nous avions déjà la meilleure approche, pourquoi les ORM?

Est-ce uniquement parce que nous voulons réduire le code DataLayer? ou nous ne voulons pas gérer notre base de données et voulons tout écrire dans notre code c # (code / données en premier)

Pourquoi EF a été introduit, si seulement la gestion du code était le problème alors, pourquoi et comment nous faisons des compromis avec les performances et la vitesse d'exécution des requêtes, même les ORM ont des limites.

S'il vous plaît répondre à ma question et laissez-moi savoir si une modification est nécessaire.

Ma seule préoccupation est la rapidité et la performance de mon site.

Merci d'avance.

Réponse acceptée

Je vais essayer de répondre à toutes vos questions en fonction de mon expérience:

  1. Pourquoi ORM? Les ORM sont très bons dans l'approche Model-First. Lorsque vous avez votre modèle (vos classes, objets, entités, ...) et avez décidé de l'enregistrer dans un certain stockage (DB par exemple). Et ici, vous prenez ORM approprié et dites-le "ok, cette classe va à cette table" et ainsi de suite. Et de cette façon, réduisez votre temps de développement. Bien sûr, vous avez des problèmes de cartographie. Mais, d'après mon expérience, je n'ai eu aucun problème de performance avec la cartographie. J'ai eu des problèmes de performances dans toutes les autres parties (requêtes de base de données, rendu d'interface utilisateur, WCF, ...) mais pas de mappage ORM. Ainsi, ORM réduit votre temps de développement, dégradant de manière négligeable les performances.

  2. Les ORM réduisent la duplication, réduisent la complexité et augmentent considérablement le temps de développement!

  3. Tout écrire en C #? En partie - oui. ORM offre un mappage fort, il est donc presque impossible de faire des erreurs stupides comme comparer int et string, définir null sur des propriétés non nullables, etc. Ainsi, ORM avec LINQ-provider offre une protection de votre code.

  4. Vos préoccupations concernant la performance sont exagérées. Bien sûr, EF (ou autre ORM) est plus lent que le code SQL écrit à la main. Je crois que dans 99% des cas, EF vous satisfera et il est beaucoup plus facile de maintenir ce code, il est auto-protégé et auto-expliqué.

Alors, ne regardez pas les chiffres. Ils n'ont rien de commun avec la vraie vie. Si vous avez besoin de plus, je vais essayer d'expliquer.


Réponse populaire

Je voudrais ajouter que le tableau de comparaison de Dapper est un peu trompeur, Entity Framework a un contra - un long temps de démarrage (631ms dans le graphique). Mais ce n'est que la première requête sur la base de données où les modèles et ainsi de suite sont construits en mémoire.

Une chose qu'un ORM peut faire pour vous est d'écrire des requêtes SQL parfaitement optimisées, alors que vous n'avez pas à vous soucier de la syntaxe SQL et à la façon de mapper vos POCO avec vos tables de base de données. Utilisez les objets ORM comme toute autre IEnumeration.

PS: Préférer cela comme commentaire mais <50 Rep :(




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi