PDA

View Full Version : سوال: تفاوت lazy loading و eager loading



merlin425
یک شنبه 10 دی 1391, 01:26 صبح
سلام دوستان
من تازه EF رو شروع کردم اگه میشه یه توضیح در مورد eager loading و lazy loading به من بدین لطفآ نگین سرچ کن هست چون این کار رو کردم چند تا نتیجه هم پیدا کردم نمونش این لینک زیر

http://barnamenevis.org/showthread.php?193065-DeferredLoadingEnabled&highlight=eager+loading

تا حدی متوجه هم شدم ولی یکم واسم گنگه یه مثال یا تکه کد می خوام اگه از روی کد توضیح بدین عالی میشه

پیشاپیش ممنون

HellisH
یک شنبه 10 دی 1391, 08:37 صبح
شما فرض کن سه جدول داری که با هم بصورت master-detail ارتباط داره به نام های country,State,City اگر شما lazy loading رو فعال کنی زمانی که country رو فراخونی کنی فقط کشورها فراخوانی میشه اما به محض اینکه property استان یک کشور رو فراخونی کنی به طوذ خودکار تمام استانها فراخوانی میشه و به همین ترتیب اگر تکرار میکنم اگر شهرهای اون استان رو فراخونی کنی باز میره از دیتابیس فراخوانی میکنه اما اگر eager loading رو فعال کنی زمانیکه کشورها رو صدا میزنی در همون لحظه تمام استانها و شهرهای هر استان هم فراخوانی میشه این موضوع رو حتی میتونی با قطع کردن کارت شبکت در مود دیباگ و یا قطع کردن سرویس دیتابیست تست کنی یع نی با lazy loading وقتی کشورهارو صدا میزنی تو مود دیباگ سرویس دیتابیس یا شبکتو قطع کن میبینی که به محض اینکه بری رو property استان بهت error میده چون میخواد همون لحظه بره و query بزنه اما در eager loading میبینی که برات نمایش میده و حتی اگه با sql profiler آشنایی داری میتونی این موضوع رو ملموس تر ببینی به این صورت که در lazy loading فقط select * from country صدا زده میشه در مرحله اول اما در eager loading یک query که join خورده با جداول state و city رو خواهی دید

merlin425
یک شنبه 10 دی 1391, 17:36 عصر
متوجه شدم امکانات شبکه که نداشتم اما با sql profiler تست کردم حق با شما بود
حالا میشه یکی توضیح بده کجا باید از کدوم روش استفاده کنیم به نظر خودم eager loading بهتره همه اطلاعاتی که می خوایم یه دفعه از بانک میگیریم تعداد دفعات مراجعه به دیتابیس هم کم میشه به هر حال باید اون اطلاعات رو که بکشیم بیرون

مشکل دیگه هم اینه که باید برای کار با EF حتمآ از linq استفاده کنم یا از sql هم پشتیبانی میکنه زمانی هم که به صورت سنتی کار میکردم بیشتر کارم با Datatable بود EF چطوره از اشیایی که قبلآ با بهشون عادت کرده بودیم استفاده میکنه یعنی میتونی با قبلیا کار کنیم یا باید بزاریمشون کنار و از اشیا, جدید و مخصوص EF استفاده کنیم

ببخشید خیلی سوال کردم :لبخند: