Введение в ORM Dapper в C#

Введение в ORM Dapper в C#

Введение в ORM Dapper в C#

Доброго времени суток! Сегодня мы рассмотрим с Вами C# библиотеку Dapper, которая представляет из
себя объектно-реляционный маппер (ORM), т.е. с помощью данной библиотеки Вы можете автоматически
конвертировать (маппить, отображать) строки из таблицы базы данных в C# объекты.

Целями Dapper являются простота кода и производительность.

У Dapper нет специфичных для базы данных деталей реализации, он работает со всеми реализациями ADO .NET,
в том числе SQLite, Firebird, Oracle, MySQL, PostgreSQL и SQL Server.

После такого краткого введения, давайте рассмотрим код простых примеров. Но для начала нам необходимо в проект
(проект должен быть создана Вами для начала) добавить две библиотеки:



# сама библиотека Dapper

$ dotnet add package dapper



# драйвер для работы с SqlServer

$ dotnet add package System.Data.SqlClient



Пример таблицы и данных, с которыми будем работать далее:



CREATE TABLE products(pname, price) (

    id INT identity(1,1) NOT NULL PRIMARY KEY,

    pname VARCHAR(255) NOT NULL,

    price INT

)



INSERT INTO products(pname, price) VALUES('prod 1', 126);

INSERT INTO products(pname, price) VALUES('prod 2', 271);

INSERT INTO products(pname, price) VALUES('prod 3', 300);

INSERT INTO products(pname, price) VALUES('prod 4', 290);

INSERT INTO products(pname, price) VALUES('prod 5', 350);

INSERT INTO products(pname, price) VALUES('prod 6', 710);

INSERT INTO products(pname, price) VALUES('prod 7', 414);

INSERT INTO products(pname, price) VALUES('prod 8', 214);



Метод Dapper ExecuteScalar

Метод ExecuteScalar выполняет запрос, который выбирает одно значение.



using System.Data.SqlClient;

using Dapper;



namespace Myrusakov

{

    class Program

    {

        static void Main(string[] args)

        {

            var connectionString = @"Server=localhostSQLEXPRESS;Database=myrusakovdb;Trusted_Connection=True;";



            using var con = new SqlConnection(connectionString);

            con.Open();



            // запрашиваем версию базы данных

            var version = con.ExecuteScalar<string>("SELECT @@VERSION");



            Console.WriteLine(version);

        }

    }

}



Метод Dapper Query

Метод Dapper.Query выполняет SQL-запрос и преобразует его в список объектов, переданных через тип шаблона.



using System.Data.SqlClient;

using Dapper;



namespace Myrusakov

{

    // класс продукта

    class Product

    {

        public int Id { get; set; }

        public string Name { get; set; }

        public int Price { get; set; }



        public override string ToString()

        {

            return $"{Id} {Name} {Price}";

        }

    }



    class Program

    {

        static void Main(string[] args)

        {

            var connectionString = @"Server=localhostSQLEXPRESS;Database=myrusakovdb;Trusted_Connection=True;";



            using var con = new SqlConnection(connectionString);

            con.Open();



            var products = con.Query<Product>("SELECT * FROM products").ToList();





            products.ForEach(product => Console.WriteLine(product));

        }

    }

}



Как видно из примера выше строки из таблицы products автоматически преобразуются в список объектов Product.

Метод Dapper.Execute

Метод Execute выполняет SQL-запрос, например, Insert, Update и т.д.



using System.Data.SqlClient;

using Dapper;



namespace Myrusakov

{

    class Program

    {

        static void Main(string[] args)

        {

             var connectionString = @"Server=localhostSQLEXPRESS;Database=myrusakovdb;Trusted_Connection=True;";



            using var con = new SqlConnection(connectionString);

            con.Open();



            // обновляем продукт

            int numberOfRows = con.Execute("UPDATE dbo. SET [price] = 256 WHERE [id] = 1");



            Console.WriteLine("Количество измененных строк: ", numberOfRows);

        }

    }

}



Параметризованные запросы в Dapper

Параметризованные запросы повышают безопасность и производительность кода. При написании параметризованных запросов,
мы используем заполнители(начинаются с символа @) вместо прямой записи значений в запросы, что позволяет избежать SQL-инъекций.



using System.Data.SqlClient;

using Dapper;



namespace Myrusakov

{

    // класс продукта

    class Product

    {

        public int Id { get; set; }

        public string Name { get; set; }

        public int Price { get; set; }



        public override string ToString()

        {

            return $"{Id} {Name} {Price}";

        }

    }



    class Program

    {

        static void Main(string[] args)

        {

            var connectionString = @"Server=localhostSQLEXPRESS;Database=myrusakovdb;Trusted_Connection=True;";



            using var con = new SqlConnection(connectionString);

            con.Open();





            // берем первый элемент с помощью метода QueryFirst

            // @id - заполнитель, на место которого подставляется значение из new { id = 1 }

            var product = con.QueryFirst<Product>("SELECT * FROM products WHERE Id[email protected]",  new { Id = 1 });





            Console.WriteLine(product);

        }

    }

}



Удаление строки из таблицы в Dapper



using System.Data.SqlClient;

using Dapper;



namespace Myrusakov

{

    class Program

    {

        static void Main(string[] args)

        {

            var connectionString = @"Server=localhostSQLEXPRESS;Database=myrusakovdb;Trusted_Connection=True;";



            using var con = new SqlConnection(connectionString);

            con.Open();



            // удаляем строку из таблицы

            // здесь также данные передаются через заполнители (!)

            int res = con.Execute(@"DELETE FROM  WHERE Id = @Id", new { Id = 1 });



            if (res > 0)

                Console.WriteLine("Продукт удален");

        }

    }

}



Класс DynamicParameters в C# Dapper

Класс DynamicParameters в Dapper представляет собой динамические параметры — набор параметров,
которые могут быть переданы методам Query и Execute.



sing System.Data;

using System.Data.SqlClient;

using Dapper;



namespace Myrusakov

{

    class Program

    {

        static void Main(string[] args)

        {

            var connectionString = @"Server=localhostSQLEXPRESS;Database=myrusakovdb;Trusted_Connection=True;";



            using var con = new SqlConnection(connectionString);

            con.Open();



            var query = "INSERT INTO products(pname, price) VALUES(@pname, @price)";



            var dynamicParams = new DynamicParameters();



            // название продукта

            dynamicParams.Add("@pname", "Prod 19", DbType.AnsiString, ParameterDirection.Input, 255);

            // цена

            dynamicParams.Add("@price", 366);



            // выполняем запрос (query) с параметрами (dynamicParams)

            int res = con.Execute(query, dynamicParams);



            if (res > 0)

                Console.WriteLine("Продукт добавлен");

        }

    }

}



В этой статье мы рассмотрели с Вами, как работать с базой данных на C# с помощью библиотеки Dapper.

Источник

НЕТ КОММЕНТАРИЕВ

Оставить комментарий