سلام وقت شما بخیر :
مورد 4 خیلی مهم است باز هم در مورد این مطلب استاد نصیری در لابه لای مطالب سایت خودشون مطالبی را گفته اند : ولی در اینجا :
وقتی که شما ارتباطات را با کلمه کلیدی virtual تعریف می کنید Entity از LazLoading استفاده می کند منظور : object relation ها load نخواهند شد تا وقتی که مورد نیاز باشند یا اولین بار که دستیابی به آنها صورت گیرد.. LazLoading ایده خوبی می باشد اما می تواند کارایی را کاهش دهد چون تعداد بیشتری رفت و برگشت به پایگاه داده وجود دارد و در صورتی که شما دقت نکنید LazLoading می تواند باعث Select N+1 شود شما می توانید LazLoading را خاموش کنید تا از LazLoading و Select N+1 جلوگیری کنید ...

نکته : مثلا در صورتی که یک جدول استان و یک جدول شهرستان داشته باشید در زمان فراخوانی اطلاعات با ارتباطات حتما از Include استفاده نمایید ...
,
منظور کلی این است که تا زمانی که اطلاعات اون فیلد مورد نیاز نباشد Load نمی شود

مورد 5 :
وقتی که شما فقط قصد بازیابی اطلاعات را داشته باشد و نه تغیرات بر روی entity ها از Tracking استفاده می کنیم ..
در بیشتر سناریو ها Tracking به افزایش کارایی کمک خواهد کرد مخصوصا اگر شما یک توسعه دهند وب باشید . دلیل این است که entity ها در بار اول که Load می شوند در حافظه کش می شوند و در درخواست های بعدی آنها از حافظه Load می شوند // آخرش را نفهمیدم فکر ک کنم منظورش اینه که در Db های معلق از AsNoTracking استفاده نکنید


مورد 7 :
کاهش دهید میزان یا حجم کوئری ها را توسط Select کردن همه entity های متفاوت مورد نیاز برای نمایش یک صفحه در یک زمان !
برای مثال :

اگر شما نیاز دارید تا نمایش دهید اطلاعات مربوط به جدواول blogPost و author .. شما باید یک کوئری بنویسید که اطلاعات را ار جدول های author و blogPost بازیابی کند فقط با یک کوئری.. شما می تونید این کار را انجام بدهید با ترکیب کردن Projection ها و egarLoading ...

این هم یک پست خوب برای egarLoading :
http://www.entityframeworktutorial.n...dbcontext.aspx