
Microsoft.EntityFrameworkCore.Proxies. המילה proxy פירושה נציג.OnConfiguring מוסיפים optionsBuilder.UseLazyLoadingProxies().internal. צריך להפוך ל-public את Gift ואת AgeGroup, ובמקביל גם את Customer, שהוא מודל נוסף.foreach נוספות שאילתות נוספות, אחת לכל קבוצת גיל שטרם הובאה.Replace, כך שכל שאילתה מודפסת בשורה אחת.הטקסט המלא של הדקות הראשונות בהרצאה «הסבר על Lazy Loading טעינת המידע ברגע הגישה אליו» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אז איך אנחנו מאפשרים לייזי לואודינג באנטיטי פריימורק? אם אנחנו מריצים כרגע את התוכנית אנחנו רואים שאין לנו הצגה של ה-age group name.
אפילו שניגשנו אליו אנטיטי פריימורק אומרת לנו אני לא מביאה לכם אותו. אז יש לי כאן כרגע את רשימת המתנות ואני רואה שהמתנות מגיעות כמו שצריך, אני רואה את המידע לגבי כל מתנה אבל אני לא רואה את המידע הנלווה של מה ה-age group name של אותה מתנה.
בקיצור, לייזי לורדינג לא מאופשר. איך אנחנו מאפשרים? מה שאנחנו צריכים לעשות זה ראשית להתקין פאקאג' מנאג'ר חדש.
נוגט חדש. הנוגט שאנחנו רוצים זה Microsoft.entityframeworkcore.proxies. כל הקונספט הזה נקרא פרוקסי, פרוקסי זה איפוי כוח או נציג. בואו נתקין את זה.
אפשר גם כמובן לראות שהנוגט נמצא פה. פה הנה הוא והדבר הבא שאנחנו רוצים לעשות זה לגשת לקונטקסט שלנו וכאן בדיוק ב-on configuring אנחנו רוצים לאפשר lazy loading זה בעצם מתבצע על ידי הפקודה options builder.use lazy loading proxies זהו עכשיו אם אנחנו מריצים יהיה משהו מאוד מוזר.
התוכנית קורסת. זה משהו שאנחנו צריכים לטפל בו והיא קורסת בטענה מוזרה שהגיפט הוא לא נגיש. המתנה לא נגישה, הוא לא מצליח להגיע אליו. מבחינתו הוא לא מצליח לראות את המתנה והסיבה זה בגלל שהאובייקטים עצמם הם לא public, כלומר המחלקות הן לא public.
זאת אומרת אם אני הולך רגע לגיפט, אני רואה שהוא אינטרנל, הוא כאילו פנימי לגבי הפרויקט עצמו. בואו נגדיר שהמחלקה היא פאבליק, המערכת חייבת שתהיה להם גישה למחלקות האלה, אז כמובן הוא יקרוס עכשיו על משהו אחר, הנה אפילו יש לי פה שגיאות קומפילציה.
הוא אומר לי Age Group, לא Public, בסדר, בואו נלך ל-Age Group, נגיד תגלות אותו כ-Public, ובואו נלך ונראה האם הקומפילציה עוברת בהצלחה, בסדר?
כן, בסדר, זה עבר, ואני באמת רואה בייביז, צ'ילדרן, טינייג'רס, טינייג'רס, אדאלטס. מעולה. הצלחנו לגרום למידע הנלווה להיות מוצג. דרך אגב, אם כבר עשיתי אותם פאבליק, אולי גם נעשה את ה-customer public, זה יהיה נראה לי רעיון טוב, שלא יהיה לנו איזושהי שגיאה בהמשך, כי הוא גם כן מודל.
אז בעצם המידע הנלווה שאנחנו מגיעים אליו, כאן האג' גרופ עכשיו נגיש לנו אבל רגע רגע איזה שאילתות הוא יצר בנוסף זה קטע מעניין בואו רגע נחזיר את האינטרספטורס יש לנו פה אינטרספטור של הוא מציג לי את השאילתה ברגע שהוא מבצע שאילתה לדאטאבייס ואינטרספטור אחד של זמנים יש לנו את הלייזי לורדינג אני יוריד כרגע את הלייזי לורדינג אני אריץ את זה
ונראה שהוא מייצר לנו שאילתה אחת בהתחלה. הנה השאילתה. דרך אגב, אולי כדאי לעשות פה אפילו עוד איזשהו צ'יינג' קטן.
אם שמתם לב, השאילתה הוצגה בשתי שורות. אז אפשר בקלות לגשת לפה ולהגיד לו, תשמע, ריפלייס, אם יש לך אנטר, אנטר זה backslash r, backslash n, זה צמד השורות האלה, תחליף לי אותו ברווח ואז כל האנטרים יוחלפו ברווחים, אז יהיה לי פחות או יותר שאילתות בלי enter, אם זה יהיה קצת יותר קל לראות אולי.
בואו נריץ פה, הנה יש לנו פה שאילתה אחת, הוא לא ירד שורה פה ברגע שכתוב לי פורום, הוא המשיך באותה שורה. אנחנו רואים שיש פה את השאילתה של המידע המרכזי, ואין לנו יותר שאילתות, וגם אנחנו לא רואים את המידע הנלווה.
איך אני יודע שאין לנו יותר שאילתות? מפני שלא מוצג לנו הירוק הזה, אינטרספטור אומר, תשמעו, אני לא הולך יותר לדאטאבייס. אם הייתי הולך הייתי מציג לכם את השאילתות שנייה לפני שאני הולך לדאטאבייס.
בואו נחזיר בחזרה את לייזי לורדינג ונראה משהו מעניין. נריץ ושימו לב כמה שאילתות פתאום מתרחשות לדאטאבייס. אז קודם כל יש לנו את השאילתה הראשונה שזה המידע הראשי.
בסדר, זה ברור, הבאנו את כל המתנות. עכשיו אנחנו מתחילים לרוץ בלולאה. אנחנו כרגע רואים שיש פה מגוון שאילתות נוספות. דרך אגב, אני רגע אפילו אוסיף עוד משהו כאן.
זאת אומרת, אני מוסיף כאן שורה דיספליינג. רק פה אני רוצה לראות מתי הוא בעצם עושה את השאילתות הנוספות. שימו לב, הנה השאילתה הראשית, הנה הדיספליינג, זה אומר שהוא לא הביא את