
age groups (babies, children, teenagers, adults) וטבלת מתנות. כותבים פונקציה display detailed gifts 1 שמביאה את כל המתנות עם ToList ומציגה לכל מתנה ID, שם, מחיר, וגם את gift.AgeGroup.Name.AgeGroup הוא Navigation Property, גישה לטבלה אחרת שלא הובאה בשאילתה.Null Reference Exception, כי הערך הוא null. הוספת ? מונעת את הקריסה, אבל שם קבוצת הגיל לא מוצג.db.age-groups.ToList (בלי להשתמש במשתנה), הקונטקסט כבר מחזיק אותן ושם הקבוצה מוצג. אפשר לראות שתי שאילתות לדאטאבייס. זה פתרון שדומה ל-explicit loading, אבל לא אלגנטי, ולכן נראה בהמשך את הדרך הרשמית.הטקסט המלא של הדקות הראשונות בהרצאה «ברירת המחדל – אין טעינה של מידע נלווה» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אז ראשית אנחנו רוצים לראות מהי ה-loading strategy default שיש ל-entity framework. משלושת ה-loading strategies שראינו, מה זה ה-default? עם מה entity framework קודם כל עובדת?
אז בואו נסתכל. יש לנו את המידע הזה בדאטאבייס, יש לנו את טבלת ה-age groups שבטבלת ה-age groups יש לנו את הטווחי גילאים השונים, יש לנו babies, children, teenagers ו-adults, יש לנו את טבלת המתנות, איפסתי את הדאטאבייס, הוספתי כמה מתנות ומה שאני רוצה לבצע זה פונקציה שמציגה לי גם את המתנות אבל עבור כל מתנה גם את השם הזה של
ה-age groups והשם לא מופיע כאן. אנחנו יכולים לעשות את זה בעזרת join, את זה נראה בהמשך אבל בוא נניח שאני לא מתעסק עם join, אני רוצה להביא את המתנות כמידע ראשי ועבור כל מתנה אני רוצה להציג גם את השם של ה-age group שלה, ואז לראות איך entity framework מתנהגת כאשר אני רוצה להציג את המידע הנלווה הזה.
בואו ניגש רגע לפרוגרם ונרד פה למטה, ונוסיף פשוט עוד פונקציה, אני אקרא לה static void display detailed gifts. הולך להיות לנו כמה כאלה, אז אני אכתוב שה-display detailed gifts 1, ובואו נציג כאן קודם כל detailed, gifts, נגדיר את הקונטקסט, gift shop context db,
נייצר new ממנו, וניגש ונביא את המידע הראשי. המידע הראשי זה המתנות gift, gifts שווה db, הנה כלל המתנות, נהפוך אותו ל-to list, זה ילך לדאטאבייס ויביא את כל המתנות שיש בטבלה, וכעת אנחנו רוצים להציג את המידע.
באמת יש לנו כאן כבר איזושהי פונקציה אז למה אני כותב את הכל מראש בוא פשוט נעתיק ונדביק ונראה לי שזאת הפונקציה שעושה את רוב העבודה אני רצה למתנות והנה ה-id של המתנה שהבאתי הנה ה-name שלה הנה ה-price וכעת פעם ראשונה אני מוסיף h group name שזה לא קיים במידע הראשי המידע הראשי זה המתנות זאת אומרת שבדיוק בשלב הזה אני רוצה להציג מידע נלווה.
אז אני הולך ל-gift.age.group ו-.name. למה זה מידע נלווה? א', בגלל שלא הבאתי אותו קודם כל, לא הבאתי כאן את ה... אני לא רואה שהבאתי דברים שקשורים לטבלה השנייה.
ב', אני רואה שיש לי פה מעין פרופרטי שהוא Navigation Property, שדרכו אני ניגש כאילו למידע של טבלה אחרת.
זה נחשב מידע שהוא נלווה כי לא הבאתי אותו קודם. אם הייתי כותב פה שאילתה שהייתה מביאה גם את זה מראש, אוקיי, בסדר, אז הוא גם היה נכלל בשאילתה, אבל לא הבאתי אותו ואני רוצה לראות איך entity framework מתנהגת.
קודם כל יש לנו כאן איזושהי הערה, ההערה זה שהדבר הזה יכול להכיל נעל. אם אנחנו ניכנס אליו, אנחנו נראה שהוא עם סימן שאלה, זה אומר שוואלה, לא חייב שיהיה לנו h group, יש בו, יכול להיות בו נעל.
לכן אם אני כרגע אציג את זה ואין לי בעצם Age Group אז התוכנית תקרוס ואנחנו לא רוצים לקבל קריסה. בואו קודם כל נראה את הקריסה ואז פשוט נוסיף שמה סימן שאלה בשביל מידע אופציונלי.
אני מריץ, אני אמור לראות כרגע קריסה כי הוא לא אמור להביא את המידע והנה באמת הקריסה. נע ל-Reference Exception. אז בכדי שהמערכת לא תקרוס אנחנו רק נשים פה סימן שאלה.
נריץ והמערכת לא תקרוס אבל תסתכלו שאין לנו כרגע את המידע הזה זה אומר שבדיפולט המידע בכלל לא מגיע גם אם אני אומר שאני רוצה את המידע הוא לא מגיע אז מה בעצם זה אומר זה אומר שאנטיטי פריימורק עובדת בשיטת לייזי לואודינג מפני שלא תיארתי כאן