Как эффективно запрашивать несколько результатов с помощью Dapper ORM

Как эффективно запрашивать несколько результатов с помощью Dapper ORM

1 марта 2023 г.

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

Прежде чем мы углубимся в особенности выполнения нескольких результатов с помощью Dapper, давайте сначала обсудим, зачем вам это может понадобиться. В некоторых случаях одного SQL-запроса может быть недостаточно для получения всех необходимых данных.

Случай использования

Например, вам может потребоваться извлечь данные из нескольких таблиц или объединить данные из разных источников. В этих случаях вы можете использовать Dapper для выполнения нескольких операторов SQL и получения нескольких результатов.

Начало работы

Шаг 1. Определите операторы SQL

Первым шагом при выполнении нескольких результатов с помощью Dapper является определение инструкций SQL, которые вы хотите выполнить. Вы можете определить эти операторы как отдельные строки или использовать одну строку и разделять операторы точкой с запятой.

Например, предположим, что мы хотим выполнить два оператора SQL:

SELECT * FROM Customers;
SELECT * FROM Orders;

Шаг 2. Создайте соединение

Далее вам нужно создать подключение к базе данных. Это можно сделать с помощью класса SqlConnection в пространстве имен System.Data.SqlClient.

using (var connection = new SqlConnection(connectionString))
{
    // ...
}

Шаг 3. Выполнение запроса

Для выполнения запроса можно использовать метод QueryMultiple() класса Dapper.SqlMapper. Этот метод принимает два аргумента: операторы SQL для выполнения и любые параметры, которые необходимо передать в запрос.

using (var connection = new SqlConnection(connectionString))
{
    var results = connection.QueryMultiple(
        @"SELECT * FROM Customers;
          SELECT * FROM Orders;");
}

Шаг 4. Получение результатов

После выполнения запроса вы можете получить результаты, используя метод Read() возвращаемого объекта. Этот метод возвращает логическое значение, указывающее, есть ли еще результаты для чтения.

using (var connection = new SqlConnection(connectionString))
{
    var results = connection.QueryMultiple(
        @"SELECT * FROM Customers;
          SELECT * FROM Orders;");

    var customers = results.Read<Customer>().ToList();
    var orders = results.Read<Order>().ToList();
}

В приведенном выше примере мы используем метод Read() для получения двух наборов результатов: клиентов и заказов. Затем мы преобразуем эти результаты в списки с помощью метода ToList().

Асинхронный метод

Для асинхронного выполнения запроса можно использовать метод QueryMultipleAsync() класса Dapper.SqlMapper. Этот метод принимает два аргумента: операторы SQL для выполнения и любые параметры, которые необходимо передать в запрос.

using (var connection = new SqlConnection(connectionString))
{
    await connection.OpenAsync();
    var results = await connection.QueryMultipleAsync(
        @"SELECT * FROM Customers;
          SELECT * FROM Orders;");
}

После асинхронного выполнения запроса мы можем получить результаты, используя метод ReadAsync() возвращаемого объекта. Этот метод возвращает логическое значение, указывающее, есть ли еще результаты для чтения.

using (var connection = new SqlConnection(connectionString))
{
    await connection.OpenAsync();
    var results = await connection.QueryMultipleAsync(
        @"SELECT * FROM Customers;
          SELECT * FROM Orders;");
    var customers = await results.ReadAsync<Customer>().ToListAsync();
    var orders = await results.ReadAsync<Order>().ToListAsync();
}

В приведенном выше примере мы используем асинхронную версию метода Read() для получения двух наборов результатов: клиентов и заказов. Затем мы преобразуем эти результаты в списки с помощью метода ToListAsync().

Заключение

Асинхронное выполнение нескольких результатов с помощью Dapper в C# — это мощная функция, позволяющая быстро и эффективно извлекать сложные данные из базы данных.

Определив операторы SQL, создав соединение, асинхронно выполнив запрос и асинхронно получив результаты, вы можете воспользоваться этой функцией и оптимизировать операции с базой данных с помощью Dapper. Благодаря своей простоте и гибкости Dapper является отличным выбором для создания высокопроизводительных приложений баз данных на C#.

Подробнее о Dapper

Выполнение хранимой процедуры Dapper

Рекомендации Dapper: Руководство для разработчиков C# по управлению базами данных

Использование Dapper с Entity Framework< /сильный>

Войны ORM: Dapper против EF Core

Увеличение производительности базы данных C# с помощью Dapper

Подпишитесь на меня

Публикация C#, LinkedIn, Instagram, Twitter, Dev.to

п


Также опубликовано здесь


Оригинал