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

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

23 февраля 2023 г.

Dapper – это инструмент ORM с открытым исходным кодом, простой в использовании и легкий, что делает его популярным среди разработчиков .NET. Он предназначен для работы с различными базами данных, включая SQL Server, Oracle, MySQL и PostgreSQL. Dapper работает быстро и эффективно, потому что не увеличивает нагрузку на уровень доступа к данным и его очень легко запустить.

Предпосылки

Прежде чем начать, вы должны иметь базовые знания о следующем.

  • Базовые знания языка программирования C#
  • ORM для Docker

Подробнее о Dapper

Войны ORM: Dapper против EF Core п Битва продолжаетсяmedium.com

Увеличение производительности базы данных C# с помощью Dapper п Dapper — это популярная среда микро-ORM (объектно-реляционное сопоставление) с открытым исходным кодом, разработанная Stack Overflow. . Это…medium.com

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

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

Использовать параметризованные запросы:

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

Вот пример параметризованного запроса с использованием Dapper:

connection.Query<Employee>("SELECT * FROM Employees WHERE EmployeeId = @EmployeeId", new { EmployeeId = 1 });

Используйте асинхронные методы:

Dapper поддерживает асинхронные операции, которые могут повысить производительность вашего приложения. Вместо ожидания синхронного завершения запроса к базе данных вы можете использовать ключевые слова async/await для асинхронного выполнения запроса. Это может помочь высвободить ресурсы и повысить общую скорость отклика вашего приложения.

Вот пример использования асинхронных методов с Dapper:

await connection.QueryAsync<Employee>("SELECT * FROM Employees");

Использовать шаблон репозитория

Шаблон репозитория — это хорошо известный шаблон проектирования, разделяющий доступ к данным и бизнес-логику. Использование шаблона репозитория с Dapper может помочь вам организовать ваш код и сделать его более удобным для сопровождения. Шаблон репозитория также упрощает тестирование кода, поскольку вы можете создавать фиктивные репозитории для целей тестирования.

Вот пример использования шаблона Repository с Dapper:

public interface IEmployeeRepository
{
    Employee GetById(int id);
    IEnumerable<Employee> GetAll();
}

public class EmployeeRepository : IEmployeeRepository
{
    private readonly IDbConnection _db;
    public EmployeeRepository(IDbConnection db)
    {
        _db = db;
    }
    public Employee GetById(int id)
    {
        return _db.QuerySingleOrDefault<Employee>("SELECT * FROM Employees WHERE EmployeeId = @EmployeeId", new { EmployeeId = id });
    }
    public IEnumerable<Employee> GetAll()
    {
        return _db.Query<Employee>("SELECT * FROM Employees");
    }
}

Использовать транзакции:

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

Вот пример использования транзакций с Dapper:

using (var transaction = connection.BeginTransaction())
{
    try
    {
        connection.Execute("INSERT INTO Employees (Name, Age) VALUES (@Name, @Age)", new { Name = "John", Age = 30 }, transaction);
        connection.Execute("INSERT INTO Employees (Name, Age) VALUES (@Name, @Age)", new { Name = "Jane", Age = 35 }, transaction);
        transaction.Commit();
    }
    catch
    {
        transaction.Rollback();
        throw;
    }
}

Использовать Dapper.Contrib

Dapper.Contrib — это библиотека с открытым исходным кодом, предоставляющая набор методов расширения для Dapper, которые могут помочь вам более эффективно выполнять операции CRUD (создание, чтение, обновление, удаление). С помощью Dapper.Contrib вы можете использовать простые методы, такие как Insert, Update, Delete и Get, для выполнения этих операций вместо написания сложных SQL-запросов.

Вот пример использования Dapper.Contrib для выполнения операций CRUD:

connection.Insert(new Employee { Name = "John", Age = 30 });
connection.Update(new Employee { EmployeeId = 1, Name = "Jane", Age = 35 });
connection.Delete(new Employee { EmployeeId = 1 });
var employee = connection.Get<Employee>(1);

Использовать сопоставление:

Dapper позволяет сопоставлять результаты запроса с объектами C#. Картирование может помочь вам работать с данными более естественно, экономя много времени при работе с большими наборами данных. Dapper поддерживает автоматическое и ручное сопоставление, и вы можете выбрать лучший метод для своего приложения.

Вот пример использования ручного сопоставления с Dapper:

public class Employee
{
    public int EmployeeId { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}

var employees = connection.Query("SELECT * FROM Employees").Select(x => new Employee
{
    EmployeeId = (int)x.EmployeeId,
    Name = (string)x.Name,
    Age = (int)x.Age
});

Использовать пул соединений

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

Вот пример использования пула соединений с Dapper:

var connectionString = "Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;Pooling=true;";
var connection = new SqlConnection(connectionString);

Использовать помощники по запросам

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

Вот пример использования помощников запросов с Dapper:

connection.Query<Employee, Department, Employee>("SELECT e.*, d.* FROM Employees e JOIN Departments d ON e.DepartmentId = d.DepartmentId WHERE e.EmployeeId = @EmployeeId", (employee, department) =>
{
    employee.Department = department;
    return employee;
}, new { EmployeeId = 1 }, splitOn: "DepartmentId");

Используйте оператор «Использование»

Инструкция «using» — это конструкция C#, позволяющая автоматически удалять ресурсы, когда они больше не нужны. При работе с базами данных важно обеспечить правильное закрытие соединений с базами данных, когда они больше не требуются. Оператор «using» может помочь вам сделать это автоматически, гарантируя, что соединения с базой данных будут закрыты, а ресурсы будут правильно удалены.

Вот пример использования оператора «using» с Dapper:

using (var connection = new SqlConnection(connectionString))
{
    connection.Open();
    // Query or Execute statements
}

Использовать профилирование производительности

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

Заключение

Эти рекомендации помогут вам более эффективно использовать Dapper в приложениях C#. Следование этим передовым методам позволяет писать более чистый, удобный в сопровождении и более производительный код при работе с базами данных. Используйте пул соединений для повышения производительности, используйте помощники по запросам для более эффективного написания сложных запросов, используйте оператор «using» для автоматического удаления ресурсов и используйте инструменты профилирования производительности для выявления узких мест в производительности. Следуя этим рекомендациям, вы сможете максимально эффективно использовать Dapper в своих приложениях C#.

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

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


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


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE