80 votes

Dapper.Arc-en-ciel VS Dapper.Contrib

Quelqu'un peut-il expliquer la différence entre Dapper.Arc-en-ciel vs Dapper.Contrib?

Je veux dire quand utilisez-vous SqlMapperExtensions.cs de Dapper.Contrib et quand devez-vous utiliser Dapper.Arc-en-ciel?

90voto

Metro Smurf Points 14234

J'ai été en utilisant Dapper pour un certain temps maintenant et ont demandé que la Contrib et arc-en-ciel projets ont été tout au sujet de moi-même. Après un peu de révision du code, voici mes réflexions sur leurs utilisations:

Dapper.Contrib

Contrib fournit un ensemble de méthodes d'extension sur le IDbConnections de base pour les opérations CRUD:

  • Obtenez de l'
  • Insérer
  • Mise à jour
  • Supprimer

L'élément clé de Contib, c'est qu'il permet le suivi de vos entités, afin de déterminer si des modifications ont été apportées.

Par exemple, à l'aide de la méthode Get avec une interface comme type de contrainte sera de retour généré dynamiquement, un proxy de la classe avec un dictionnaire interne de suivre ce que les propriétés ont changé.

Vous pouvez ensuite utiliser la méthode de mise à Jour qui va générer le code SQL nécessaire pour mettre à jour uniquement les propriétés qui ont changé.

Bémol de taille: pour obtenir le suivi de la bonté de Contrib, vous devez utiliser une Interface comme votre type de contrainte pour permettre à la classe de proxy pour être généré.

Dapper.Arc-en-ciel

Arc-en-ciel est une classe Abstraite, que vous pouvez utiliser comme une classe de base pour votre Dapper classes de base des opérations CRUD:

  • Obtenez de l'
  • Insérer
  • Mise à jour
  • Supprimer

Ainsi que quelques méthodes couramment utilisées telles que la Première (obtient le premier enregistrement dans une table) et Tous (obtient tous les résultats des enregistrements dans une table).

Pour toutes fins utiles, arc-en-ciel est en fait un wrapper pour votre plus couramment utilisé de la base de données des interactions et permet de renforcer le ennuyeux SQL basé sur la propriété des noms et des contraintes de type.

Par exemple, grâce à une opération, arc-en-ciel va construire à la vanille, d'une requête SQL et retourne toutes les colonnes, puis mapper les valeurs de retour pour le type de la contrainte.

De même, l'insertion/mise à jour des méthodes de générer dynamiquement le SQL nécessaire pour une insertion/mise à jour basé sur une contrainte de type de noms de propriété.

Bémol de taille: arc-en-ciel attend toutes vos tables pour avoir une identité, une colonne nommée "Id".

Les différences?

La différence majeure entre Contrib et arc-en-ciel est (OMI), un suivi des modifications à vos entités, l'autre n'a pas:

  • Utilisation Contrib quand vous voulez être en mesure de suivre l'évolution de vos entités.
  • Utiliser l'arc-en-ciel lorsque vous voulez utiliser quelque chose de plus le long des lignes d'un standard ADO.NET approche.

Sur une note de côté: je souhaite que je l'avais regardé dans l'arc-en-ciel plus tôt que j'ai créé, très semblable à la classe de base que j'utilise avec Dapper.


À partir de l'article et la citation @anthonyv cité: Que gênant INSÉRER un problème, entrer des données dans la DB

Il y a maintenant 2 autres Api, vous pouvez choisir d'aussi bien (en plus d'arc-en-ciel) (CRUD) Dapper.Contrib et Dapper Extensions. Je ne pense pas que de one-size-fits-all. En fonction de votre problème et préférences il y a peut être une API qui fonctionne le mieux pour vous. J'ai essayé de présenter quelques-unes des options. Il n'est pas heureux "meilleur moyen" pour résoudre tous les problèmes dans le monde.

Je soupçonne ce que Sam a essayé de transmettre dans la citation ci-dessus et le blog a été: Votre scénario peut exiger beaucoup de cartographie personnalisés (utiliser la vanille Dapper), ou il peut avoir besoin de suivre l'entité changements (utiliser Contrib), ou vous pouvez avoir des scénarios d'utilisation courants (utiliser arc-en-ciel) ou vous pouvez utiliser une combinaison de tous. Ou même ne pas utiliser Dapper. YMMV.

3voto

anthonyv Points 1728

Sam explique en détails ce que la différence est dans son post http://samsaffron.com/archive/2012/01/16/that-annoying-insert-problem-getting-data-into-the-db-using-dapper.

Fondamentalement, c'est l'habitude pas en 1 taille unique réponse et c'est à nous de décider de l'approche à aller avec en fonction de vos besoins:

Il y a maintenant 2 autres Api, vous pouvez choisir d'aussi bien (en plus d'arc-en-ciel) (CRUD) Dapper.Contrib et Dapper Extensions. Je ne pense pas que de one-size-fits-all. En fonction de votre problème et préférences il y a peut être une API qui fonctionne le mieux pour vous. J'ai essayé de présenter quelques-unes des options. Il n'est pas heureux "meilleur moyen" pour résoudre tous les problèmes dans le monde.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X