Quelqu'un peut-il expliquer la différence entre Dapper.Rainbow et Dapper.Contrib?
Je veux dire quand utilisez-vous SqlMapperExtensions.cs de Dapper.Contrib et quand devez-vous utiliser Dapper.Rainbow?
J'utilise Dapper depuis un certain temps maintenant et je me suis demandé en quoi consistaient les projets Contrib et Rainbow . Après un peu de révision du code, voici mes réflexions sur leurs utilisations:
Contrib fournit un ensemble de méthodes d'extension sur l'interface IDbConnection pour les opérations CRUD de base:
L'élément clé de Contrib est qu'il fournit un suivi pour vos entités afin d'identifier si des modifications ont été apportées.
Par exemple, l'utilisation de la méthode Get avec une interface comme contrainte de type renvoie une classe proxy générée dynamiquement avec un dictionnaire interne pour suivre les propriétés modifiées.
Vous pouvez ensuite utiliser la méthode Update qui générera le SQL nécessaire pour mettre à jour uniquement les propriétés qui ont changé.
Avertissement majeur : pour obtenir la qualité de suivi de Contrib, vous devez utiliser une interface comme contrainte de type pour permettre à la classe proxy d'être générée.
Rainbow est une classe abstraite que vous pouvez utiliser comme classe de base pour vos classes Dapper pour fournir des opérations CRUD de base:
Ainsi que certaines méthodes couramment utilisées telles que First (obtient le premier enregistrement dans un tableau) et All (obtient tous les enregistrements de résultats dans un tableau).
À toutes fins utiles, Rainbow est essentiellement un wrapper pour vos interactions de base de données les plus couramment utilisées et construira le SQL ennuyeux en fonction des noms de propriété et des contraintes de type.
Par exemple, avec une opération Get, Rainbow créera une requête Vanilla SQL et renverra toutes les colonnes, puis mappera ces valeurs au type utilisé comme contrainte.
De même, les méthodes d'insertion/mise à jour construisent dynamiquement le SQL nécessaire pour une insertion/mise à jour en fonction des noms de propriété de la contrainte de type.
Avertissement majeur : Rainbow s'attend à ce que toutes vos tables aient une colonne d'identité nommée "Id".
La principale différence entre Contrib et Rainbow est (IMO), l'un suit les modifications apportées à vos entités, l'autre ne:
Sur une note: j'aurais aimé avoir étudié Rainbow plus tôt car j'ai construit une classe de base très similaire que j'utilise avec Dapper.
De l'article et cite @anthonyv cité: Ce problème INSERT ennuyeux, obtenir des données dans la base de données
Il y a maintenant 2 autres API que vous pouvez également choisir ( en plus de Rainbow ) (pour CRUD) Dapper.Contrib et Extensions Dapper . Je ne pense pas que ce soit unique. Selon votre problème et vos préférences, il peut exister une API qui vous convient le mieux. J'ai essayé de présenter certaines des options. Il n'y a pas de "meilleure façon" bénie de résoudre tous les problèmes du monde.
Je soupçonne ce que Sam essayait de transmettre dans la citation ci-dessus et le billet de blog correspondant était: Votre scénario peut nécessiter beaucoup de mappage personnalisé (utilisez Vanilla Dapper), ou il peut avoir besoin de suivre les changements d'entité (utiliser Contrib), ou vous pouvez ont des scénarios d'utilisation communs (utilisez Rainbow) ou vous pouvez utiliser une combinaison de tous. Ou même pas utiliser Dapper. YMMV.
Cet article d'Adam Anderson décrit les différences entre plusieurs bibliothèques d'extension CRUD Dapper:
Sam décrit en détail quelle est la différence dans son article - http://samsaffron.com/archive/2012/01/16/that-annoying-insert-problem-getting-data-into-the-db- using-dapper .
Fondamentalement, sa réponse n'est pas la taille habituelle et convient à tous et c'est à nous de décider quelle approche adopter en fonction de vos besoins:
Il y a maintenant 2 autres API que vous pouvez également choisir ( en plus de Rainbow ) (pour CRUD) Dapper.Contrib et Extensions Dapper . Je ne pense pas que ce soit unique. Selon votre problème et vos préférences, il peut exister une API qui vous convient le mieux. J'ai essayé de présenter certaines des options. Il n'y a pas de "meilleure façon" bénie de résoudre tous les problèmes du monde.