PracticU

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

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

הסבר על Explicit Loading טעינת מידע נלווה ספציפי מראש
Explicit loading מאפשר להביא מידע נלווה ספציפי מראש, בשאילתה נפרדת שאנחנו מפעילים בעצמנו. התחביר שונה לפי סוג ה-Navigation Property.
שני סוגי Navigation Property
- Reference Navigation Property: אובייקט בודד, כמו AgeGroup בתוך Gift.
- Collection Navigation Property: אוסף, כמו כל המתנות (Gifts) ששייכות ל-AgeGroup.
השלבים העיקריים
1. הכנה: משכפלים את הפונקציה הקודמת ומביאים מתנה אחת עם First. מבטלים את ה-Lazy loading בקונטקסט, ובהרצה מקבלים שאילתה אחת ובלי שם קבוצת הגיל.
2. טעינת Reference: קוראים ל-db.entry(gift).Reference(...), שם ה-Navigation Property של האובייקט (AgeGroup), ואחריו Load. נוספת שאילתה שנייה למידע הנלווה.
3. הבדיקה: שתי השאילתות מתבצעות לפני ההצגה, כך שבשלב ההצגה המידע כבר קיים.
4. טעינת Collection: מביאים AgeGroup אחד עם Single לפי השם children. הלולאה על AgeGroup.Gifts ריקה כי האוסף לא נטען. לכן קוראים ל-db.entry(ageGroup).Collection(...) עם השם Gifts ואחריו Load.
5. בדיקה על teenagers: במקום children (שיש לו מתנה אחת) בודקים את teenagers, שיש לו שתי מתנות. רואים שתי שאילתות, ואחריהן הצגה של כל המתנות.
מתי זה מתאים
כשבעליית האפליקציה או בכניסה לטופס יודעים איזה מידע נלווה ספציפי יידרש, כך שברגע ההצגה הוא כבר זמין.
עכשיו אפשר לטעון מידע נלווה מפורשות, בין אם הוא אובייקט בודד ובין אם אוסף.
השיעור הבא בקורס: הסבר על Eager Loading טעינת כל המידע עם שאילתה אחת

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

  1. 00:00

    ההבדל בין Reference ל-Collection Navigation

  2. 00:57

    הצגת מתנה בודדת ללא lazy loading

  3. 01:59

    טעינה מפורשת עם db.entry Load

  4. 02:42

    שתי השאילתות הנפרדות לדאטאבייס

  5. 03:35

    Explicit Loading עבור Collection

  6. 04:32

    מעבר על המתנות של ה-age group

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

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

  1. 00:02

    אחרי שראינו Lazy Loading, בואו נראה Explicit Loading. ראשית, אנחנו צריכים להבין שיש קצת איזשהו הבדל ב-Explicit Loading בין אם אנחנו רוצים להביא מידע של Navigation Property שהוא אובייקט בודד, שימו לב שבמתנה יש Age Group כאובייקט בודד.

  2. 00:24

    אובייקט בודד נקרא Reference Navigation Property. אז יש הבדל בין זה לבין מצב שבו המידע הנלווה הוא Collection.

  3. 00:35

    לדוגמה, אם הבאנו Age Group ואנחנו רוצים להראות את כל המתנות ששייכות ל-Age Group הזה, אז אנחנו נמצאים ב-Collection Navigation Property.

  4. 00:47

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

  5. 01:27

    המתנה האחת כולל ה-age group name שלה. מה שאני רוצה לעשות רק לפני שאני אריץ זה כמובן לגשת לקונטקסט ולבטל את ה-lazy loading, כי אנחנו לא רוצים לראות את הטכניקה הזאת שכבר ראינו בעבר.

  6. 01:45

    אם אין לנו lazy loading, איך אנחנו מביאים את המידע בצורה של explicit loading? כמובן שעכשיו אנחנו נראה את הפרטים של המתנה מבלי לראות את ה-age Group Name שלה.

  7. 01:59

    בואו נריץ את זה והנה אנחנו רואים שיש לנו מתנה אחת אבל אין לנו פה את ה-H Group Name, יש לנו שאילתה אחת ויחידה. כעת מה שאנחנו רוצים לבצע זה לבצע את ה-Explicit Loading וזה פשוט לבוא ל-db.entry ולהגיד לו תשמע אתה כבר הבאת גיפט, יש לך אותו כי זה נמצא הרי ברמת הקונטקסט.

  8. 02:24

    פגש בבקשה ל-reference navigation property שנקרא h group והשם הזה h group צריך להיות בדיוק השם של ה-reference navigation property של האובייקט שלנו ופשוט load it. לך עוד פעם לדאטאבייס ותביא את המידע לגביו ספציפית אחרי שהבאת את המידע הראשי, זה המידע המשני.

  9. 02:52

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

  10. 03:08

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

  11. 03:24

    שוב, זה מתאים למצב שנניח בהעלאת האפליקציה או כניסה לטופס, אנחנו רוצים להביא את כל הנתונים ואם היוזר רוצה, מקסימום אני מציג לו אותם. אם אני רוצה לבצע משהו דומה עבור Collection Navigation Property, בואו נשים פה את המספר 3, שכפל, נכתוב שאנחנו רוצים לראות את Feature 3. אז אני רוצה To Display Gifts

  12. 03:53

    ואנחנו רוצים לבצע פה משהו קצת אחר. מה שאנחנו רוצים לעשות זה קודם כל להביא את האובייקט של h Group וממנו להגיע ל-Gifts, כי אני רוצה את ה-Collection Navigation Property, אני רוצה את ה-Gifts הזה, למלא אותו.

  13. 04:13

    בוא נניח שיש לי h Group של db.h Groups, נקודה, בוא נלך הפעם ל-Single ועבור כל h Group, תביא לי age group שהשם שלו זה children. תביא לי את כל המתנות של הילדים בבת אחת.

  14. 04:32

    אחרי שיש לי את ה-age group אנחנו רוצים את המתנות שלו, לרוץ ולהציג את המתנות. אז אנחנו רוצים שיהיה לנו איזה for each שרצה על gift in age group נקודה gift אלו כלל המתנות שיש לנו.

  15. 04:52

    וניפטר רגע מכל השורות האלה. את ה-displaying אולי נשים פה. טיפה נסדר את הקוד. הנה יש לנו כרגע, תביא לי age group אחד שמייצג את children, אבל ממנו אני רוצה להגיע למתנות שלו.

  16. 05:10

    זה המידע הנלווה ששייך לו, זה ה-navigation, ה-collection navigation property שלו. ושימו לב שאני הולך מתנה, מתנה, מציג את השם שלה, את המחיר שלה ואת ה-age group name שלה.

  17. 05:26

    בואו נראה בעצם מה יקרה. אנחנו מריצים והוא לא מציג לנו שום דבר. הוא לא רץ על הלולאה מפני שהלולאה מבחינתו ריקה לגמרי. למה הלולאה ריקה?

  18. 05:39

    מפני שהוא לא הביא את המתנות ששייכות ל-age

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

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

ההרצאה הבאה: הסבר על Eager Loading - טעינת כל המידע עם שאילתה אחת

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

  • ניתוב ספציפי
  • Explicit Casting
  • אבטחת מידע
  • Page Object Design עם Explicit Wait

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

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