عنوان:

‫بررسی فلسفه وجودی AddAsync در EF-Core


نویسنده: پویا امینی
تاریخ: ۱۴۰۵/۰۴/۰۱ ۱۹:۳۰
آدرس: www.dntips.ir
یکی از رایج‌ترین اشتباهاتی که در پروژه‌های NET. می‌بینم این است:
await dbContext.Users.AddAsync(user);
await dbContext.SaveChangesAsync();
بعضی توسعه‌دهندگان تصور می‌کنند چون متد Async وجود دارد، پس همیشه باید از آن استفاده شود. اما واقعیت کمی متفاوت است. در Entity Framework Core متد Add فقط Entity را وارد Change Tracker می‌کند:
dbContext.Users.Add(user);
هیچ Query به دیتابیس ارسال نمی‌شود. هیچ I/O اتفاق نمی‌افتد. هیچ عملیات زمان‌بری وجود ندارد. بنابراین Add کاملاً کافی است.

پس چرا AddAsync وجود دارد؟
دلیل اصلی پشتیبانی از Value Generatorهای Async است.
مثال:
public class Order
{
     public string Number { get; set; }
}
فرض کنید شناسه سفارش توسط یک سرویس خارجی یا Sequence خاص تولید شود. در این حالت EF Core ممکن است هنگام Add نیاز به عملیات Async داشته باشد. برای همین متد AddAsync اضافه شده است. اما در اکثر پروژه‌ها:
dbContext.Users.Add(user);
await dbContext.SaveChangesAsync()
کاملاً صحیح است.

نکته مهم؛ این کد:
await dbContext.Users.AddAsync(user);
به معنی Insert Async در دیتابیس نیست. عملیات واقعی زمانی انجام می‌شود که:
await dbContext.SaveChangesAsync();
فراخوانی شود.

خلاصه:
✅ متد Add: مناسب برای اکثر سناریوها.
✅ متد AddAsync: زمانی که Value Generator یا Provider به عملیات Async نیاز داشته باشد.
❌ متد AddAsync، باعث سریع‌تر شدن Insert نمی‌شود.
❌ متد AddAsync، جایگزین SaveChangesAsync نیست.

اگر در پروژه‌های خود بدون دلیل از AddAsync استفاده می‌کنید، احتمالاً هیچ تفاوتی با Add نخواهید دید.