Подорож у світ бібліотек .NET: знайомство з Dapper

Merhaba!
Екосистема .NET є потужною платформою, яка завдяки своєму багатому набору бібліотек спрощує процес розробки. Ці бібліотеки заощаджують час розробникам, спрощують код і пропонують вирішення багатьох проблем у різних проєктах. Однак серед цієї різноманітності іноді може бути важко зрозуміти, яку бібліотеку і коли варто використовувати.

Тому я вирішив розпочати серію статей, в яких ми розглянемо найпоширеніші бібліотеки .NET.

Моя мета:

  • Ознайомити з найбільш популярними бібліотеками .NET, які роблять різницю в проєктах,
  • Показати їхні переваги, області застосування та основні характеристики,
  • Надати практичний посібник з прикладами коду, щоб ви могли легко використовувати ці бібліотеки у своїх проєктах.

pic

Перший крок: 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

Leave a Reply

Your email address will not be published. Required fields are marked *