PracticU

הסבר על Lazy Loading
טעינת המידע ברגע הגישה אליו

בלי כתוביותעם כתוביות
PracticU › קורס Entity Framework Core - עבודה עם מסד נתונים בדוט-נט › הסבר על Lazy Loading טעינת המידע ברגע הגישה אליו
מילון מושגים:
Entity Framework - ספריית מיקרוסופט שממפה בין אובייקטים בקוד לבין טבלאות במסד נתונים, ומאפשרת לעבוד עם הנתונים בלי לכתוב SQL ישיר.
פריימוורק - מסגרת תוכנה שמספקת מבנה וכלים מוכנים לפיתוח יישומים, כדי לחסוך כתיבת קוד חוזר.
לולאה - מבנה בקרה שחוזר על קטע קוד שוב ושוב כל עוד תנאי מתקיים או עבור כל פריט באוסף.
NuGet - מנהל החבילות של פלטפורמת .NET, המשמש להתקנה ולניהול ספריות בפרויקטים.
הרשאה - קביעה אילו פעולות ומשאבים מותרים למשתמש או לתהליך לאחר שזהותו אומתה. שולטת במי רשאי לעשות מה.
מודל - רכיב שמייצג את הנתונים ואת הלוגיקה העסקית באפליקציה. גם ייצוג מופשט של מערכת או תהליך.
שאילתה - בקשה למסד נתונים לשלוף, להוסיף, לעדכן או למחוק נתונים, לרוב בשפת SQL.
מטמון - אחסון זמני ומהיר של נתונים שנדרשים שוב, כדי להאיץ גישה ולהפחית עומס מהמקור המקורי.

הסבר על Lazy Loading טעינת המידע ברגע הגישה אליו
הרצאה זו מראה איך להפעיל Lazy loading ב-Entity Framework Core, ומה קורה בפועל מול הדאטאבייס כשמציגים מידע נלווה בלולאה.
הפעלת Lazy loading
1. חבילת NuGet: מתקינים את Microsoft.EntityFrameworkCore.Proxies. המילה proxy פירושה נציג.
2. הגדרה בקונטקסט: ב-OnConfiguring מוסיפים optionsBuilder.UseLazyLoadingProxies().
3. קריסה על הרשאות גישה: אחרי ההפעלה התוכנית קורסת בטענה שהמתנה לא נגישה. הסיבה היא שהמחלקות internal. צריך להפוך ל-public את Gift ואת AgeGroup, ובמקביל גם את Customer, שהוא מודל נוסף.
4. התוצאה: שמות קבוצות הגיל (babies, children, teenagers, adults) מוצגים.
מה קורה בדאטאבייס
- בלי Lazy loading יש שאילתה אחת בלבד, ושום שאילתה נוספת לא מופיעה.
- עם Lazy loading יש שאילתה ראשונה למידע הראשי, ואז תוך כדי ה-foreach נוספות שאילתות נוספות, אחת לכל קבוצת גיל שטרם הובאה.
- כל קבוצת גיל שהובאה נשמרת במטמון (cache) של הקונטקסט, כך שבפעם הבאה שצריכים את אותה קבוצה אין שאילתה נוספת. שם הקבוצה teenagers, למשל, מובא פעם אחת בלבד.
- לשם הצפייה בזה הוחזרו המיירטים של ההרצאה הקודמת, ובמיירט הוחלפו תווי ירידת שורה ברווח עם Replace, כך שכל שאילתה מודפסת בשורה אחת.
שימו לב
בלולאה ארוכה עם נתונים שונים יכולות להצטבר הרבה פניות לדאטאבייס, וזה לא יעיל. Lazy loading מתאים רק כשסביר שהמשתמש לא יצטרך את המידע הנלווה. כשברור שהמידע נדרש, כמו בלולאה שמציגה אותו, לא כדאי להשתמש בו.
אפשר כעת להפעיל Lazy loading ולזהות מתי הוא גורם לריבוי שאילתות.
השיעור הבא בקורס: הסבר על Explicit Loading טעינת מידע נלווה ספציפי מראש

פרקי ההרצאה: הסבר על Lazy Loading טעינת המידע ברגע הגישה אליו

  1. 00:00

    למה המידע הנלווה לא מוצג

  2. 00:36

    התקנת ה-NuGet של Proxies

  3. 01:12

    הפעלת UseLazyLoadingProxies

  4. 01:54

    הפיכת המחלקות ל-public

  5. 02:52

    בחינת השאילתות עם Interceptor

  6. 04:30

    ריבוי השאילתות ב-Lazy Loading

תמלול ההרצאה: הסבר על Lazy Loading טעינת המידע ברגע הגישה אליו

הטקסט המלא של הדקות הראשונות בהרצאה «הסבר על Lazy Loading טעינת המידע ברגע הגישה אליו» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    אז איך אנחנו מאפשרים לייזי לואודינג באנטיטי פריימורק? אם אנחנו מריצים כרגע את התוכנית אנחנו רואים שאין לנו הצגה של ה-age group name.

  2. 00:14

    אפילו שניגשנו אליו אנטיטי פריימורק אומרת לנו אני לא מביאה לכם אותו. אז יש לי כאן כרגע את רשימת המתנות ואני רואה שהמתנות מגיעות כמו שצריך, אני רואה את המידע לגבי כל מתנה אבל אני לא רואה את המידע הנלווה של מה ה-age group name של אותה מתנה.

  3. 00:31

    בקיצור, לייזי לורדינג לא מאופשר. איך אנחנו מאפשרים? מה שאנחנו צריכים לעשות זה ראשית להתקין פאקאג' מנאג'ר חדש.

  4. 00:40

    נוגט חדש. הנוגט שאנחנו רוצים זה Microsoft.entityframeworkcore.proxies. כל הקונספט הזה נקרא פרוקסי, פרוקסי זה איפוי כוח או נציג. בואו נתקין את זה.

  5. 00:57

    אפשר גם כמובן לראות שהנוגט נמצא פה. פה הנה הוא והדבר הבא שאנחנו רוצים לעשות זה לגשת לקונטקסט שלנו וכאן בדיוק ב-on configuring אנחנו רוצים לאפשר lazy loading זה בעצם מתבצע על ידי הפקודה options builder.use lazy loading proxies זהו עכשיו אם אנחנו מריצים יהיה משהו מאוד מוזר.

  6. 01:27

    התוכנית קורסת. זה משהו שאנחנו צריכים לטפל בו והיא קורסת בטענה מוזרה שהגיפט הוא לא נגיש. המתנה לא נגישה, הוא לא מצליח להגיע אליו. מבחינתו הוא לא מצליח לראות את המתנה והסיבה זה בגלל שהאובייקטים עצמם הם לא public, כלומר המחלקות הן לא public.

  7. 01:51

    זאת אומרת אם אני הולך רגע לגיפט, אני רואה שהוא אינטרנל, הוא כאילו פנימי לגבי הפרויקט עצמו. בואו נגדיר שהמחלקה היא פאבליק, המערכת חייבת שתהיה להם גישה למחלקות האלה, אז כמובן הוא יקרוס עכשיו על משהו אחר, הנה אפילו יש לי פה שגיאות קומפילציה.

  8. 02:09

    הוא אומר לי Age Group, לא Public, בסדר, בואו נלך ל-Age Group, נגיד תגלות אותו כ-Public, ובואו נלך ונראה האם הקומפילציה עוברת בהצלחה, בסדר?

  9. 02:23

    כן, בסדר, זה עבר, ואני באמת רואה בייביז, צ'ילדרן, טינייג'רס, טינייג'רס, אדאלטס. מעולה. הצלחנו לגרום למידע הנלווה להיות מוצג. דרך אגב, אם כבר עשיתי אותם פאבליק, אולי גם נעשה את ה-customer public, זה יהיה נראה לי רעיון טוב, שלא יהיה לנו איזושהי שגיאה בהמשך, כי הוא גם כן מודל.

  10. 02:46

    אז בעצם המידע הנלווה שאנחנו מגיעים אליו, כאן האג' גרופ עכשיו נגיש לנו אבל רגע רגע איזה שאילתות הוא יצר בנוסף זה קטע מעניין בואו רגע נחזיר את האינטרספטורס יש לנו פה אינטרספטור של הוא מציג לי את השאילתה ברגע שהוא מבצע שאילתה לדאטאבייס ואינטרספטור אחד של זמנים יש לנו את הלייזי לורדינג אני יוריד כרגע את הלייזי לורדינג אני אריץ את זה

  11. 03:21

    ונראה שהוא מייצר לנו שאילתה אחת בהתחלה. הנה השאילתה. דרך אגב, אולי כדאי לעשות פה אפילו עוד איזשהו צ'יינג' קטן.

  12. 03:30

    אם שמתם לב, השאילתה הוצגה בשתי שורות. אז אפשר בקלות לגשת לפה ולהגיד לו, תשמע, ריפלייס, אם יש לך אנטר, אנטר זה backslash r, backslash n, זה צמד השורות האלה, תחליף לי אותו ברווח ואז כל האנטרים יוחלפו ברווחים, אז יהיה לי פחות או יותר שאילתות בלי enter, אם זה יהיה קצת יותר קל לראות אולי.

  13. 03:55

    בואו נריץ פה, הנה יש לנו פה שאילתה אחת, הוא לא ירד שורה פה ברגע שכתוב לי פורום, הוא המשיך באותה שורה. אנחנו רואים שיש פה את השאילתה של המידע המרכזי, ואין לנו יותר שאילתות, וגם אנחנו לא רואים את המידע הנלווה.

  14. 04:11

    איך אני יודע שאין לנו יותר שאילתות? מפני שלא מוצג לנו הירוק הזה, אינטרספטור אומר, תשמעו, אני לא הולך יותר לדאטאבייס. אם הייתי הולך הייתי מציג לכם את השאילתות שנייה לפני שאני הולך לדאטאבייס.

  15. 04:22

    בואו נחזיר בחזרה את לייזי לורדינג ונראה משהו מעניין. נריץ ושימו לב כמה שאילתות פתאום מתרחשות לדאטאבייס. אז קודם כל יש לנו את השאילתה הראשונה שזה המידע הראשי.

  16. 04:40

    בסדר, זה ברור, הבאנו את כל המתנות. עכשיו אנחנו מתחילים לרוץ בלולאה. אנחנו כרגע רואים שיש פה מגוון שאילתות נוספות. דרך אגב, אני רגע אפילו אוסיף עוד משהו כאן.

  17. 04:54

    זאת אומרת, אני מוסיף כאן שורה דיספליינג. רק פה אני רוצה לראות מתי הוא בעצם עושה את השאילתות הנוספות. שימו לב, הנה השאילתה הראשית, הנה הדיספליינג, זה אומר שהוא לא הביא את

לקורס המלא: קורס Entity Framework Core

ההרצאה הקודמת: ברירת המחדל – אין טעינה של מידע נלווה

ההרצאה הבאה: הסבר על Explicit Loading - טעינת מידע נלווה ספציפי מראש

הרצאות קשורות מקורסים אחרים

  • טעינה עצלה ריאקט - Lazy Loading React
  • עבודה עם UITableViewController - הוספה דינמית של פריטים, מחיקה דינמית וסידור המידע ב-swipe

קורסים נוספים במסלול

  • קורס דוט-נט - NET Core. - עם Rest API
  • קורס ASP.NET
  • קורס MVC
  • קורס Git ו-GitHub עם Visual Studio