Mohammad Ehsan Tabakhian
Mohammad Ehsan Tabakhian
خواندن ۳ دقیقه·۶ سال پیش

Loading Related Data در EntityFramework Core

خب اول از همه باید خدمتتون عرض کنم که EntityFrameworkCore مثل نسخه های قبلی خودش به ما اجازه میده در برقراری رابطه های مختلف بین جداول دیتابیس از NavigationProperties استفاده کنیم .

نویگیشن پراپرتی : استفاده یه پراپرتی از جنس مدل اون سر رابطه در مدل خودمون، جهت لود کردن آسون تر اطلاعات رکوردی که از جدول اون سر رابطه در مدل ما وجود داره . مثال پایین رو ببینید . (پراپرتی School در مدل Person مثال واضحی از نویگیشن پراپرتی هست که احتمالا خودتون هم باهاش آشنا بودید ! )

کلا سه تا حالت متداول برای لود کردن دیتا یه نویگیشن پراپرتی موقعه استفاده از دیتابیس در کدمون وجود داره ! که تقریبا همه ORM های جهان این سه تا روش رو ارائه میدن به شما .

در EF به دلیل استفاده از دستورات Linq جهت ایجاد کوئری به دیتابیس و دریافت اطلاعات شما تفاوت کارکرد این سه روش رو بهتر درک میکنید! ? لینک مقاله اختصاصی هر قسمت بر روی اسم آن موجود است.

لود زودهنگام (Eager loading) : به معنی اینکه دیتای نویگیشن پراپرتی به عنوان بخشی از کوئری اولیه برای استفاده vhyjuمستقیم شما از سمت دیتابیس برمیگرده ! که خودتون میتونید تصور کنید که در صورتی که نیاز نداشته باشید به اون دیتا ثانویه چقدر میتونه در سیستم شما پرفورمنس هیت داشته باشه !

 لود زودهنگام (Eager loading)
لود زودهنگام (Eager loading)



لود صریح (Explicit loading) : به معنی اینکه دیتای نویگیشن پراپرتی بعدا به صورت خیلی صریح و مشخص توسط شما لود خواهد شد و در کوئری اول دیتا برای نویگشن پراپرتی به صورت خودکار لود نمیشه ولی شما هر نویگیشن پراپرتی که بخوایید رو انتخاب میکنید و برای اون کوئری جدا میفرستید و اطلاعات اونو دریافت میکنید و روی مدل اولیه ست میکنید ( یه سری داستان در مورد استیت های هر مدل هست که مشخص میکنه دیتای نویگیشن پراپرتی ها در چه زمانی لود شدن ، انشالله در مقاله بعدی در موردش حرف میزنیم ).

لود صریح (Explicit loading)
لود صریح (Explicit loading)



لود تنبل(Lazy loading) یا (Lazy Initialization): به معنی اینکه دیتای نویگیشن پراپرتی در کوئری اولیه لود نمیشه و از این جهت اگر ازش استفاده ای هم نداشته باشید بی جهت اطلاعات اضافی لود نکردید ! آآآمااا (ترکی بخونیدش ?) اولین بار که تلاش کنید برای لود کردن دیتا موجود در اون نویگیشن پراپرتی خود ORM براتون کوئری مناسبش رو ایجاد میکنه و در بکگراند اون دیتا رو لود میکنه و نهایتا روی مدلتون ست میکنه ولی شما متوجه این فرآیند نمیشید ! خوبی لیزی لودینگ اینکه پرفرمنس هیت بیخودی نداره ولی خب هرمدلی مزایا و معایب خودش رو داره که در جای مناسب بهش میپردازیم !

لود تنبل (Lazy loading) یا (Lazy Initialization)
لود تنبل (Lazy loading) یا (Lazy Initialization)



دقت کنید که پیشفرض EF در نسخه های قبلی روی Laze Loading بود و طبیعتا خود به خود فعال بود این روش ! ولی در نسخه EF Core برای فعال کردن این روش نیازمند استفاده از یک پکیج خاص هستید و باید حتما در هنگام ادد شدن سرویس دیتابیس کانتکس به نرم افزار ذکر کنید که میخوایید از این قابلیت استفاده کنید !

اصلا نگران نباشید ! ددوووشواری نداریم چون قراره خودم در مقاله بعدی که مربوط به lazy loading هست نحوه استفاده و نکاتش رو توضیح بدم !

مطالب این مجموعه مقالات مستقیم از داکیومنت رسمی مایکروسافت اومده !
و سمپل ها رو هم میتونید از اینجا ببینید : AspNetCore GitHub



programmingmicrosoftEntityFrameworkdataبرنامه نویسی
شاید از این پست‌ها خوشتان بیاید