Comment utiliser l'ORM Dapper en C #

Les mappeurs relationnels d'objets (ORM) sont utilisés depuis longtemps pour éliminer la discordance d'impédance qui existe entre les modèles d'objet des langages de programmation et les modèles de données dans les bases de données relationnelles. Dapper est un ORM léger et open source développé par l'équipe Stack Overflow. Dapper est très rapide par rapport aux autres ORM principalement en raison de son poids léger.

Dapper a été conçu dans un souci de performances et de facilité d'utilisation. Il prend en charge la liaison d'objets statiques et dynamiques à l'aide de transactions, de procédures stockées ou d'insertions en masse de données.

Installez Dapper ORM dans Visual Studio

Pour commencer à utiliser Dapper, procédez comme suit:

  1. Ouvrez Visual Studio 
  2. Cliquez sur Fichier -> Nouveau -> Projet
  3. Sélectionnez «Web -> Application Web ASP.Net» dans la boîte de dialogue «Nouveau projet»
  4. Spécifiez un nom pour le projet Web
  5. Sélectionnez le modèle de projet vide pour ASP.Net
  6. Cliquez sur OK pour enregistrer le projet

Cela crée un projet d'application Web ASP.Net vide.

Si NuGet est installé, vous pouvez installer Dapper à l'aide de NuGet - sélectionnez simplement le projet dans la fenêtre Explorateur de solutions, cliquez avec le bouton droit sur «Gérer les packages NuGet ...» et recherchez Dapper. Cliquez ensuite sur Installer pour démarrer l'installation de Dapper. Une fois Dapper installé avec succès, vous êtes prêt à partir.

CRUD dans .Net utilisant Dapper ORM

Écrivons maintenant du code en utilisant Dapper pour effectuer des opérations CRUD sur une base de données. Considérez une base de données nommée qui contient une table appelée Auteur avec les champs suivants.

  • ID
  • Prénom
  • Nom de famille

Vous devez créer une classe d'entité (classe POCO) pour cette table de base de données pour plus de simplicité lorsque vous travaillez avec Dapper. Voici la classe d'entité nommée Author qui correspond à la table Author dans la base de données.

public class Author

    {

        public int Id { get; set; }

        public string FirstName { get; set; }

        public string LastName { get; set; }

    }

La Query()méthode d'extension de Dapper vous permet de récupérer des données de la base de données et de remplir des données dans votre modèle d'objet. La méthode suivante récupère tous les enregistrements de la table Author, les stocke en mémoire et renvoie la collection.

public List ReadAll()

{

         using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings[“AdventureWorks”].ConnectionString))

         {

            return db.Query

             (“Select * From Author”).ToList();

        }

    }

Notez que vous devez inclure l'espace de noms Dapper dans votre programme pour tirer parti du framework Dapper.

La méthode suivante illustre comment vous pouvez rechercher un enregistrement particulier dans la table Auteur.

public Author Find(int id)    

    {

        using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings [“AdventureWorks”].ConnectionString))

        {

            return db.Query(“Select * From Author “ + 

            WHERE Id = @Id”, new { id }).SingleOrDefault();

        }

    }

La Execute()méthode du framework Dapper peut être utilisée pour insérer, mettre à jour ou supprimer des données dans une base de données. Cette méthode renvoie une valeur entière qui implique le nombre de lignes affectées lors de l'exécution de la requête.

La méthode suivante illustre comment vous pouvez mettre à jour un enregistrement à l'aide de l'infrastructure Dapper.

public int Update(Author author)

    {

        using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings [“AdventureWorks”].ConnectionString))

        {

            string sqlQuery +

            “ LastName = @LastName “ + “WHERE Id = @Id”;

            int rowsAffected = db.Execute(sqlQuery, author);

            return rowsAffected;

        }

    }

Comme vous pouvez le voir dans l'extrait de code ci-dessus, la Update()méthode renvoie le nombre de lignes qui ont été affectées, c'est-à-dire le nombre d'enregistrements qui ont été mis à jour. Dans cet exemple, un seul enregistrement a été mis à jour et, par conséquent, la méthode renvoie 1 en cas de succès.

Procédures stockées à l'aide de Dapper ORM

Pour travailler avec des procédures stockées à l'aide de Dapper, vous devez mentionner explicitement le type de commande lors de l'appel Querydes Executeméthodes ou . Voici un exemple qui montre comment utiliser les procédures stockées avec Dapper.

 public List Read()

    {

        using (IDbConnection db = new SqlConnection (ConfigurationManager.ConnectionStrings [“AdventureWorks”].ConnectionString))

        {

            string readSp;

            return db.Query(readSp, commandType: CommandType.StoredProcedure).ToList();

        }

    }

Le framework Dapper prend également en charge les transactions, c'est-à-dire que vous pouvez utiliser des opérations transactionnelles si nécessaire. Pour ce faire, vous pouvez tirer parti des méthodes BeginTransaction()et EndTransaction()comme vous le faites généralement lorsque vous travaillez avec des transactions dans ADO.Net. Vous devrez ensuite écrire vos déclarations transactionnelles dans les appels de méthode BeginTransactionet EndTransaction.

Le micro ORM Dapper est extrêmement léger et simple à utiliser. Il ne génère pas votre SQL pour vous, mais facilite le mappage des résultats des requêtes avec vos POCO (anciens objets CLR simples). Mieux encore, vous obtenez une vitesse d'exécution beaucoup plus rapide qu'avec Entity Framework, presque identique à ADO.Net, en fait. 

-

Faites plus avec C #:

  • Comment travailler avec AutoMapper en C #
  • Quand utiliser une classe abstraite ou une interface en C #
  • Comment travailler avec des threads en C #
  • Comment utiliser l'ORM Dapper en C #
  • Comment implémenter le modèle de conception de référentiel en C #
  • Comment implémenter un simple logger en C #
  • Comment travailler avec des délégués en C #
  • Comment travailler avec les délégués Action, Func et Predicate en C #
  • Comment travailler avec log4net en C #
  • Comment travailler avec la réflexion en C #