کاهش رفت و برگشت به دیتابیس در حین ذخیره سازی اطلاعات
اهمیت: عادی نوع: ارائه ایده و پیشنهاد شماره نگارش: 1.0
در حین لاگین شما SetAuthCookie رو به userName تنظیم کردید. بعد نتیجه‌اش این شده، هرجایی که نیاز به یافتن Id کاربر بوده، مجبور هستیم یکبار کوئری بگیریم و این مورد زیاد در برنامه وجود داره. بهتره در زمان فراخوانی SetAuthCookie، مقدار userId رو که داریم به عنوان پارامتر بهش پاس بدیم. به این ترتیب در خیلی از جاها جلو خواهیم افتاد.
مثلا الان اکثر کلاس‌های موجودیت‌ها چنین تعریفی رو دارند:
 public class SomeName
{
    public virtual User User { get; set; }
}
میشه کمی این تعریف رو اصلاح کرد و بجایش نوشت:
   [ForeignKey("UserId")]
  public virtual User User { set; get; }
  public int? UserId { set; get; }
حالا موقع ست کردن اطلاعات این کلاس، دیگر نیازی نیست تا یکبار id کاربر از دیتابیس Find شود (چون در User.Identity.Name موجود هست؛ مهم نیست که Name اینجا داره، مهم کاربرد آن است در برنامه). فقط کافی هست این مقدار به UserId نسبت داده شود.
تقریبا اکثر کلاس‌های دومین شما نکته کار با کلیدهای خارجی رو جهت کاهش رفت و برگشت به دیتابیس ندارند.
  • #
    ‫۱۱ سال و ۳ ماه قبل، سه‌شنبه ۲۵ تیر ۱۳۹۲، ساعت ۱۵:۱۹
    بله، کاملا درست می‌فرمایید. متاسفانه آن زمان که می‌این پروژه را می‌نوشتم، از وجود چنین امکانی آگاه نبودم.
    ذخیره کردن id به جای username در کوکی هم کاملا درست است و قبلا با بررسی orchard به این نتیجه رسیده بودم، منتهی دیگر وقت نشد که اصلاح کنم.
    امیدوارم کاربران دیگر هم به این نکته کاملا توجه کنند.
    باز هم ممنون