<MyRusakov.ru />

Разработчик игр на Unreal Engine

Разработчик игр на Unreal Engine

Этот комплект с нуля всего за 7 месяцев сделает Вас Unreal-разработчиком. И при этом учиться достаточно 1 час в день.

Начнёте Вы с основ программирования, постепенно перейдя к C++. Затем очень подробно изучите Unreal Engine, и после научитесь программировать на C++ в Unreal Engine. В конце создадите крупный проект на C++ в Unreal Engine для своего портфолио.

Комплект содержит:

- 416 видеоуроков

- 95 часов видео

- 1024 задания для закрепления материала из уроков

- 3 финальных тестирования

- 4 сертификата

- 12 Бонусных курсов

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

Введение в 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=localhost\SQLEXPRESS;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=localhost\SQLEXPRESS;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=localhost\SQLEXPRESS;Database=myrusakovdb;Trusted_Connection=True;";

            using var con = new SqlConnection(connectionString);
            con.Open();

            // обновляем продукт
            int numberOfRows = con.Execute("UPDATE dbo.[products] 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=localhost\SQLEXPRESS;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=@Id",  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=localhost\SQLEXPRESS;Database=myrusakovdb;Trusted_Connection=True;";

            using var con = new SqlConnection(connectionString);
            con.Open();

            // удаляем строку из таблицы
            // здесь также данные передаются через заполнители (!)
            int res = con.Execute(@"DELETE FROM [products] 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=localhost\SQLEXPRESS;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.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.