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
Также опубликовано здесь
Оригинал