خب اول از همه باید خدمتتون عرض کنم که EntityFrameworkCore مثل نسخه های قبلی خودش به ما اجازه میده در برقراری رابطه های مختلف بین جداول دیتابیس از NavigationProperties استفاده کنیم .
نویگیشن پراپرتی : استفاده یه پراپرتی از جنس مدل اون سر رابطه در مدل خودمون، جهت لود کردن آسون تر اطلاعات رکوردی که از جدول اون سر رابطه در مدل ما وجود داره . مثال پایین رو ببینید . (پراپرتی School در مدل Person مثال واضحی از نویگیشن پراپرتی هست که احتمالا خودتون هم باهاش آشنا بودید ! )
کلا سه تا حالت متداول برای لود کردن دیتا یه نویگیشن پراپرتی موقعه استفاده از دیتابیس در کدمون وجود داره ! که تقریبا همه ORM های جهان این سه تا روش رو ارائه میدن به شما .
در EF به دلیل استفاده از دستورات Linq جهت ایجاد کوئری به دیتابیس و دریافت اطلاعات شما تفاوت کارکرد این سه روش رو بهتر درک میکنید! ? لینک مقاله اختصاصی هر قسمت بر روی اسم آن موجود است.
لود زودهنگام (Eager loading) : به معنی اینکه دیتای نویگیشن پراپرتی به عنوان بخشی از کوئری اولیه برای استفاده vhyjuمستقیم شما از سمت دیتابیس برمیگرده ! که خودتون میتونید تصور کنید که در صورتی که نیاز نداشته باشید به اون دیتا ثانویه چقدر میتونه در سیستم شما پرفورمنس هیت داشته باشه !
لود صریح (Explicit loading) : به معنی اینکه دیتای نویگیشن پراپرتی بعدا به صورت خیلی صریح و مشخص توسط شما لود خواهد شد و در کوئری اول دیتا برای نویگشن پراپرتی به صورت خودکار لود نمیشه ولی شما هر نویگیشن پراپرتی که بخوایید رو انتخاب میکنید و برای اون کوئری جدا میفرستید و اطلاعات اونو دریافت میکنید و روی مدل اولیه ست میکنید ( یه سری داستان در مورد استیت های هر مدل هست که مشخص میکنه دیتای نویگیشن پراپرتی ها در چه زمانی لود شدن ، انشالله در مقاله بعدی در موردش حرف میزنیم ).
لود تنبل(Lazy loading) یا (Lazy Initialization): به معنی اینکه دیتای نویگیشن پراپرتی در کوئری اولیه لود نمیشه و از این جهت اگر ازش استفاده ای هم نداشته باشید بی جهت اطلاعات اضافی لود نکردید ! آآآمااا (ترکی بخونیدش ?) اولین بار که تلاش کنید برای لود کردن دیتا موجود در اون نویگیشن پراپرتی خود ORM براتون کوئری مناسبش رو ایجاد میکنه و در بکگراند اون دیتا رو لود میکنه و نهایتا روی مدلتون ست میکنه ولی شما متوجه این فرآیند نمیشید ! خوبی لیزی لودینگ اینکه پرفرمنس هیت بیخودی نداره ولی خب هرمدلی مزایا و معایب خودش رو داره که در جای مناسب بهش میپردازیم !
دقت کنید که پیشفرض EF در نسخه های قبلی روی Laze Loading بود و طبیعتا خود به خود فعال بود این روش ! ولی در نسخه EF Core برای فعال کردن این روش نیازمند استفاده از یک پکیج خاص هستید و باید حتما در هنگام ادد شدن سرویس دیتابیس کانتکس به نرم افزار ذکر کنید که میخوایید از این قابلیت استفاده کنید !
اصلا نگران نباشید ! ددوووشواری نداریم چون قراره خودم در مقاله بعدی که مربوط به lazy loading هست نحوه استفاده و نکاتش رو توضیح بدم !
مطالب این مجموعه مقالات مستقیم از داکیومنت رسمی مایکروسافت اومده !
و سمپل ها رو هم میتونید از اینجا ببینید : AspNetCore GitHub