Ответ
Dapper — это высокопроизводительный, легковесный микро-ORM (Object-Relational Mapper) для .NET, созданный командой Stack Overflow. Его основная задача — максимально эффективно маппить результаты SQL-запросов на объекты C# с минимальными накладными расходами.
Ключевые особенности:
- Высокая производительность: Dapper работает поверх ADO.NET (
IDbConnection), добавляя очень мало оверхеда. Он часто быстрее полноценных ORM, таких как Entity Framework Core. - Простота и контроль: Вы пишете чистый SQL, что дает полный контроль над запросами, но Dapper берет на себя рутинную работу по маппингу данных из
DataReaderв ваши классы. - Безопасность: Полная поддержка параметризованных запросов для защиты от SQL-инъекций.
Базовый пример использования:
using Dapper;
using System.Data.SqlClient;
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
}
string connectionString = "YourConnectionString";
using (var connection = new SqlConnection(connectionString))
{
// Query<T> выполняет запрос и маппит результат на коллекцию объектов User
var activeUsers = connection.Query<User>(
"SELECT Id, Name, Email FROM Users WHERE IsActive = @IsActive",
new { IsActive = true } // Параметризация через анонимный объект
);
foreach (var user in activeUsers)
{
Console.WriteLine($"{user.Name} ({user.Email})");
}
// Execute для команд INSERT/UPDATE/DELETE
var rowsAffected = connection.Execute(
"UPDATE Users SET LastLogin = @Now WHERE Id = @Id",
new { Now = DateTime.UtcNow, Id = 42 }
);
}
Плюсы Dapper:
- Скорость: Идеален для сценариев, где производительность работы с БД критична.
- Прозрачность: Вы видите и контролируете выполняемый SQL.
- Гибкость: Легко работать со сложными запросами, хранимыми процедурами и нестандартными типами данных.
Минусы (по сравнению с EF Core):
- Нет миграций: Структуру базы данных (DDL) нужно обновлять отдельно (например, через DbUp или Flyway).
- Нет трекинга изменений: Для обновления сущности нужно явно вызывать
ExecuteсUPDATE-запросом. - Больше ручного кода: Нужно писать SQL для всех операций.
Итог: Dapper — отличный выбор для проектов, где важна максимальная производительность, есть сложные SQL-запросы или когда команда предпочитает иметь прямой контроль над SQL.