PracticU

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

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

ברירת המחדל – אין טעינה של מידע נלווה
מה קורה כשמציגים מידע נלווה מבלי לבקש אותו מראש? ההרצאה בודקת את התנהגות ברירת המחדל של Entity Framework ומראה שהיא לא טוענת מידע נלווה בכלל.
מה נבדק
1. הכנה: בדאטאבייס יש טבלת age groups (babies, children, teenagers, adults) וטבלת מתנות. כותבים פונקציה display detailed gifts 1 שמביאה את כל המתנות עם ToList ומציגה לכל מתנה ID, שם, מחיר, וגם את gift.AgeGroup.Name.
2. מידע נלווה: AgeGroup הוא Navigation Property, גישה לטבלה אחרת שלא הובאה בשאילתה.
3. ההרצה הראשונה: התוכנית קורסת עם Null Reference Exception, כי הערך הוא null. הוספת ? מונעת את הקריסה, אבל שם קבוצת הגיל לא מוצג.
4. המסקנה: ברירת המחדל היא לא להביא את המידע. Lazy loading לא מופעל כברירת מחדל, ואין זו טעינה עצלנית אמיתית, כי המידע לא נטען גם כשצריכים אותו.
5. למה זה כך: פנייה לדאטאבייס יקרה, ולכן Entity Framework חוסכת בה ומשאירה למתכנת לבחור אחת משלוש האסטרטגיות.
עקיפה: מילוי הקונטקסט
אם מביאים קודם את כל קבוצות הגיל עם db.age-groups.ToList (בלי להשתמש במשתנה), הקונטקסט כבר מחזיק אותן ושם הקבוצה מוצג. אפשר לראות שתי שאילתות לדאטאבייס. זה פתרון שדומה ל-explicit loading, אבל לא אלגנטי, ולכן נראה בהמשך את הדרך הרשמית.
בהמשך
הסרטונים הבאים יראו כיצד מפעילים Lazy loading, Explicit loading ו-Eager loading.
עכשיו ברור למה מידע נלווה לא מופיע כשלא מבקשים אותו, ושזו בחירה מכוונת של Entity Framework לחסוך בפניות.
השיעור הבא בקורס: הסבר על Lazy Loading טעינת המידע ברגע הגישה אליו

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

  1. 00:00

    מהי אסטרטגיית ברירת המחדל

  2. 01:02

    בניית הפונקציה display detailed gifts

  3. 02:01

    ניסיון להציג age group name

  4. 02:42

    Navigation Property למידע מטבלה אחרת

  5. 03:17

    טיפול ב-null עם סימן שאלה

  6. 03:52

    ברירת המחדל לא טוענת מידע נלווה

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

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

  1. 00:02

    אז ראשית אנחנו רוצים לראות מהי ה-loading strategy default שיש ל-entity framework. משלושת ה-loading strategies שראינו, מה זה ה-default? עם מה entity framework קודם כל עובדת?

  2. 00:17

    אז בואו נסתכל. יש לנו את המידע הזה בדאטאבייס, יש לנו את טבלת ה-age groups שבטבלת ה-age groups יש לנו את הטווחי גילאים השונים, יש לנו babies, children, teenagers ו-adults, יש לנו את טבלת המתנות, איפסתי את הדאטאבייס, הוספתי כמה מתנות ומה שאני רוצה לבצע זה פונקציה שמציגה לי גם את המתנות אבל עבור כל מתנה גם את השם הזה של

  3. 00:45

    ה-age groups והשם לא מופיע כאן. אנחנו יכולים לעשות את זה בעזרת join, את זה נראה בהמשך אבל בוא נניח שאני לא מתעסק עם join, אני רוצה להביא את המתנות כמידע ראשי ועבור כל מתנה אני רוצה להציג גם את השם של ה-age group שלה, ואז לראות איך entity framework מתנהגת כאשר אני רוצה להציג את המידע הנלווה הזה.

  4. 01:09

    בואו ניגש רגע לפרוגרם ונרד פה למטה, ונוסיף פשוט עוד פונקציה, אני אקרא לה static void display detailed gifts. הולך להיות לנו כמה כאלה, אז אני אכתוב שה-display detailed gifts 1, ובואו נציג כאן קודם כל detailed, gifts, נגדיר את הקונטקסט, gift shop context db,

  5. 01:39

    נייצר new ממנו, וניגש ונביא את המידע הראשי. המידע הראשי זה המתנות gift, gifts שווה db, הנה כלל המתנות, נהפוך אותו ל-to list, זה ילך לדאטאבייס ויביא את כל המתנות שיש בטבלה, וכעת אנחנו רוצים להציג את המידע.

  6. 01:58

    באמת יש לנו כאן כבר איזושהי פונקציה אז למה אני כותב את הכל מראש בוא פשוט נעתיק ונדביק ונראה לי שזאת הפונקציה שעושה את רוב העבודה אני רצה למתנות והנה ה-id של המתנה שהבאתי הנה ה-name שלה הנה ה-price וכעת פעם ראשונה אני מוסיף h group name שזה לא קיים במידע הראשי המידע הראשי זה המתנות זאת אומרת שבדיוק בשלב הזה אני רוצה להציג מידע נלווה.

  7. 02:33

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

  8. 02:48

    ב', אני רואה שיש לי פה מעין פרופרטי שהוא Navigation Property, שדרכו אני ניגש כאילו למידע של טבלה אחרת.

  9. 02:57

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

  10. 03:10

    קודם כל יש לנו כאן איזושהי הערה, ההערה זה שהדבר הזה יכול להכיל נעל. אם אנחנו ניכנס אליו, אנחנו נראה שהוא עם סימן שאלה, זה אומר שוואלה, לא חייב שיהיה לנו h group, יש בו, יכול להיות בו נעל.

  11. 03:25

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

  12. 03:41

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

  13. 03:54

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

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

ההרצאה הקודמת: אסטרטגיות טעינת המידע - של Entity Framework Core

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

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

  • ניתוב ברירת מחדל - ריאקט
  • אבטחת מידע
  • ערכי ברירת מחדל עבור פרמטרים
  • ניתוב ברירת מחדל - Default Static Route

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

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