Dapper چیست؟
Micro-ORM سبک و پرسرعت برای داتنت که بهجای Query Builder کامل، مستقیم SQL خام مینویسید و فقط نگاشت نتیجه به Object را برایتان انجام میدهد.
چرا مهم است؟
وقتی کنترل کامل روی SQL دقیق تولیدشده لازم است (مثلاً Queryهای پیچیده گزارشگیری) یا کارایی خام اولویت اول است، Dapper سربار انتزاع EF Core را ندارد و معمولاً سریعتر است.
تعریف
Dapper یک کتابخانه سبک (نه ORM کامل مثل EF Core) است که روی IDbConnection استاندارد کار میکند و نتیجه Query خام SQL را مستقیم به Object/List نگاشت میکند، بدون Change Tracking یا تولید خودکار SQL.
مثال
using var connection = new SqlConnection(connectionString);
var product = await connection.QueryFirstOrDefaultAsync<Product>(
"SELECT * FROM Products WHERE Id = @Id", new { Id = id });
var products = await connection.QueryAsync<Product>(
"SELECT * FROM Products WHERE Price > @MinPrice", new { MinPrice = 1000000 });
var rows = await connection.ExecuteAsync(
"UPDATE Products SET Price = @Price WHERE Id = @Id", new { Id = id, Price = newPrice });
Dapper در برابر EF Core
- Dapper: کنترل کامل روی SQL، سربار کمتر، مناسب Queryهای پیچیده گزارشگیری یا کارایی بحرانی.
- EF Core: بهرهوری بالاتر توسعه (LINQ، Migrations، Change Tracking)، مناسب اکثر CRUD روزمره.
- خیلی از پروژههای واقعی هر دو را کنار هم استفاده میکنند: EF Core برای CRUD معمولی، Dapper برای Queryهای سنگین خاص.
اشتباه رایج
❌ الحاق مستقیم رشته کاربر در متن SQL بهجای پارامتر (@Id) — درست مثل هر SQL خام دیگر، Dapper هم اگر پارامتری نشود، دقیقاً همان ریسک SQL Injection را دارد.
منبع و مطالعه بیشتر
خلاصه
Dapper یک Micro-ORM سریع است که SQL خام را مستقیم به Object نگاشت میکند، بدون سربار Change Tracking کامل EF Core. همیشه پارامتر (@Id) استفاده کنید، نه الحاق رشته، تا در برابر SQL Injection ایمن بمانید. مرجع کامل: مستندات Dapper در گیتهاب.
