Merhaba!
Екосистема .NET є потужною платформою, яка завдяки своєму багатому набору бібліотек спрощує процес розробки. Ці бібліотеки заощаджують час розробникам, спрощують код і пропонують вирішення багатьох проблем у різних проєктах. Однак серед цієї різноманітності іноді може бути важко зрозуміти, яку бібліотеку і коли варто використовувати.
Тому я вирішив розпочати серію статей, в яких ми розглянемо найпоширеніші бібліотеки .NET.
Моя мета:
- Ознайомити з найбільш популярними бібліотеками .NET, які роблять різницю в проєктах,
- Показати їхні переваги, області застосування та основні характеристики,
- Надати практичний посібник з прикладами коду, щоб ви могли легко використовувати ці бібліотеки у своїх проєктах.
Перший крок: Dapper
У першій статті нашої серії ми розглянемо Dapper, який здобув популярність завдяки своїй простоті та швидкості. Lегкий, гнучкий і орієнтований на продуктивність ORM (Object-Relational Mapper), Dapper часто використовують для перетворення SQL-запитів у базові операції з базою даних. Особливо він підходить для проєктів, де потрібна висока продуктивність і є альтернативою важким ORM інструментам (наприклад, Entity Framework).
Отже, що ви знайдете в цій статті про Dapper?
- Що таке Dapper і чому його використовують?
- Покрокова інструкція по встановленню Dapper.
- Приклади використання для початківців і просунутих користувачів.
- Переваги та обмеження.
Якщо ви готові, давайте почнемо знайомство з бібліотеками .NET з Dapper!
Що таке Dapper?
Dapper — це популярна, легка і мінімалістична ORM (Object-Relational Mapper) бібліотека у світі .NET. Вона працює на основі ADO.NET і спрощує виконання операцій з базою даних. У порівнянні з іншими ORM, Dapper є більш швидким і дозволяє мати повний контроль над SQL.
Коротко кажучи, Dapper дає відповіді на такі питання:
- Як швидше та простіше взаємодіяти з базою даних?
- Як підвищити продуктивність при використанні ORM?
- Як виконувати SQL-запити без складних налаштувань?
Переваги Dapper
Dapper має кілька переваг, що роблять його популярним вибором:
- Продуктивність: працює так само швидко, як і ADO.NET.
- Простота: не вимагає складних налаштувань.
- Контроль над SQL: дає змогу писати SQL-запити безпосередньо, що забезпечує повний контроль.
- Гнучкість: ідеально підходить для малих і середніх проєктів, де необхідно швидко отримати результат.
- Легкість: набагато компактніший і швидший, ніж інші ORM.
Встановлення: Додавання Dapper до проєкту
Щоб почати використовувати Dapper, спочатку необхідно додати бібліотеку через NuGet:
Install-Package Dapper
Необхідний простір імен
Не забудьте додати наступний простір імен у вашому проєкті для роботи з Dapper:
using Dapper;
Перші кроки з Dapper
Після встановлення давайте розглянемо кілька основних прикладів того, як працювати з Dapper:
Підключення до бази даних
Dapper працює через об'єкт SqlConnection. Наприклад:
using (var connection = new SqlConnection("Server=.;Database=MyDb;Trusted_Connection=True;"))
{
// Операції з базою даних виконуються тут.
}
## Отримання Даних
Отримати дані з таблиці дуже просто:
string sql = "SELECT Id, Name, Email FROM Users";
var users = connection.Query(sql);
foreach (var user in users)
{
Console.WriteLine($"ID: {user.Id}, Name: {user.Name}, Email: {user.Email}");
}
```
Додавання Даних
Щоб додати дані до таблиці за допомогою Dapper, можна зробити так:
string insertSql = "INSERT INTO Users (Name, Email) VALUES (@Name, @Email)";
connection.Execute(insertSql, new { Name = "Gizem Gunes", Email = "[email protected]" });
Оновлення Даних
Щоб оновити існуючі дані в таблиці:
string updateSql = "UPDATE Users SET Name = @Name WHERE Id = @Id";
connection.Execute(updateSql, new { Name = "Nikola Tesla", Id = 1 });
Видалення Даних
Щоб видалити запис, можна використати наступний приклад:
string deleteSql = "DELETE FROM Users WHERE Id = @Id";
connection.Execute(deleteSql, new { Id = 1 });
Розширені Можливості Dapper
Для більш складних проєктів вам можуть знадобитися деякі розширені можливості Dapper:
Використання Stored Procedure
Dapper легко виконує Stored Procedure:
var users = connection.Query("GetAllUsers", commandType: CommandType.StoredProcedure);
Множинне Відображення (Multi Mapping)
Легко управляти зв'язками між таблицями:
string sql = @"SELECT u.Id, u.Name, o.OrderId, o.Amount
FROM Users u
INNER JOIN Orders o ON u.Id = o.UserId";
var userOrders = connection.Query(
sql,
(user, order) =>
{
user.Orders.Add(order);
return user;
}
);
Додавання Даних до Кількох Таблиць
Для додавання даних до кількох таблиць можна використовувати метод Execute
:
using (var transaction = connection.BeginTransaction())
{
try
{
string userSql = "INSERT INTO Users (Name, Email) VALUES (@Name, @Email)";
connection.Execute(userSql, new { Name = "Gizem Gunes", Email = "[email protected]" }, transaction);
string orderSql = "INSERT INTO Orders (UserId, Amount) VALUES (@UserId, @Amount)";
connection.Execute(orderSql, new { UserId = 1, Amount = 150.00 }, transaction);
transaction.Commit();
Console.WriteLine("Data inserted successfully!");
}
catch
{
transaction.Rollback();
Console.WriteLine("An error occurred, transaction rolled back.");
}
}
Отримання Даних за допомогою Join Операцій
Dapper надає зручну структуру для отримання даних через зв'язки між таблицями:
string sql = @"SELECT u.Id, u.Name, o.OrderId, o.Amount
FROM Users u
INNER JOIN Orders o ON u.Id = o.UserId";
var userOrders = connection.Query(
sql,
(user, order) =>
{
user.Orders.Add(order);
return user;
},
splitOn: "OrderId"
).ToList();
foreach (var user in userOrders)
{
Console.WriteLine($"User: {user.Name}");
foreach (var order in user.Orders)
{
Console.WriteLine($"Order Id: {order.OrderId}, Amount: {order.Amount}");
}
}
Пагінація Даних (Paging)
Щоб розділити великий набір даних на частини, можна використовувати пагінацію:
int page = 1;
int pageSize = 10;
string sql = @"SELECT *
FROM Users
ORDER BY Id
OFFSET @Offset ROWS
FETCH NEXT @PageSize ROWS ONLY";
var users = connection.Query(sql, new { Offset = (page - 1) * pageSize, PageSize = pageSize });
foreach (var user in users)
{
Console.WriteLine($"ID: {user.Id}, Name: {user.Name}");
}
Обмеження Dapper
У Dapper є не тільки переваги, а й певні обмеження:
- Відсутність Підтримки Міграцій: Dapper не підтримує автоматичні міграції бази даних, як це робить Entity Framework.
- Управління SQL вручну: Може знадобитися написання великої кількості SQL-запитів вручну.
- Складні Зв'язки: Робота з дуже складними зв'язками між таблицями може бути важкою.
В яких проєктах слід використовувати Dapper?
Dapper є чудовим вибором для таких типів проєктів:
- Програми, де продуктивність має велике значення.
- Сценарії, де достатньо легкого та швидкого доступу до даних.
- Проєкти, де конфігурація ORM викликає непотрібну складність.
Невелика заувага
Оцінка Продуктивності з Dapper
Якщо ви хочете побачити, наскільки швидко працює Dapper, ви можете виконати вимірювання часу, як у наступному прикладі:
var stopwatch = Stopwatch.StartNew();
string sql = "SELECT * FROM Users";
var users = connection.Query(sql);
stopwatch.Stop();
Console.WriteLine($"Data fetched in: {stopwatch.ElapsedMilliseconds}ms");
Висновок
Dapper — це ідеальний інструмент для розробників, які шукають мінімалістичний та продуктивний ORM.
Dapper, надаючи повний контроль над SQL, усуває необхідність писати громіздкий код ADO.NET. Його швидкість і легкість у навчанні роблять Dapper незамінним для багатьох розробників .NET. Особливо якщо ви серед тих, хто каже: "Entity Framework надто важкий, я хочу працювати більш контрольовано!", тоді Dapper — це інструмент, який вам обов'язково варто спробувати.
Цим матеріалом ми розглянули основні особливості та використання Dapper. Сподіваюся, цей посібник був корисний для вас. Якщо у вас є питання про Dapper або ви хочете поділитися своїм досвідом, давайте обговоримо це в коментарях! 😊
Перекладено з: .NET Kütüphanelerine Yolculuk: Dapper ile Tanışın