
Dispose. עוטפים אותו ב-using, כך שהפעולה נקראת בסיום הבלוק, גם אם הייתה חריגה.FirstOrDefault עם תנאי כמו p => p.ProductID == id, בלי לכתוב שאילתה מלאה. אם לא נמצא מוצר מוחזר null.Add, מגדירים Entry(product).State = EntityState.Added. המוצר מסומן כנוסף לדאטאבייס, ו-SaveChanges שומר אותו.Modified, בלי להביא אותו קודם מהדאטאבייס. ב-SaveChanges כל הערכים החדשים נשמרים.Deleted.SaveChanges. בגרסה הקודמת הביאו את המוצר ואז עדכנו אותו, כלומר פנו לדאטאבייס פעמיים. האוסף עצמו הוא רק סכמה של הנתונים ולא מכיל אותם, ולכן הגישה הזו חוסכת זמן וזיכרון.הטקסט המלא של הדקות הראשונות בהרצאה «שימוש ב-Entity Framework - חלק 2» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
בסרטון הקודם אנחנו השתמשנו באנטיטי פריימורק בכדי להביא מידע מהדאטאבייס, להציג אותו, לבצע הוספה, עדכון ומחיקה.
כעת אנחנו הולכים לראות איך טיפה לייעל או לקצר את הקוד שכתבנו באנטיטי פריימורק. אז נתחיל עם פונקציית אינדקס. יש לנו פה את האובייקט Northwind Entities והבאנו פה ליסט.
אנחנו יכולים פשוט את הליסט הזאת להכניס ישירות ל-view וטיפה מקצר. דבר נוסף, מה שחשוב להבין זה שאובייקט ה-Northwind Entities, אובייקט האנטיטיז של אנטיטי פריימורק, כלומר ה-DB, מכיל פונקציית dispose.
כל אובייקט ב-.NET שמכיל פונקציית dispose, ברגע שאנחנו משתמשים איתו, עלינו לקרוא לפונקציית dispose. והשיטה הטובה ביותר לבצע את זה, במידה ואנחנו משתמשים באובייקט בתוך פונקציה, זה לבצע using בצורה כזאת.
זאת אומרת, שאנחנו בונים אובייקט מסוג Entity Framework ואז משתמשים איתו. מחזירים View שמביא את הליסט של כל המוצרים. אבל אם אנחנו עוטפים אותו ב-Using, זה אומר שכאשר MVC תסיים לעבוד עם האובייקט הזה, או יותר נכון כאשר הפונקציה תסתיים ותתבצע ה-Return, בוודאות אנחנו יודעים
שפונקציית Dispose הולכת להיקרא בדיוק בסוגריים האלה. לא רק זה, גם היא הולכת להיקרא במידה והיה Exception. ואנחנו יכולים להיות בטוחים שהמשאבים שפונקציה dispose אמורה לשחרר אכן ישתחררו גם אם היה אקספשן ואנחנו ננותב אוטומטית לאיזשהו דף אחר
כאשר נלמד על טיפול באקספשנים אנחנו נראה איך עושים את זה. אבל אנחנו כרגע דאגנו לקרוא לפונקציה dispose.
בואו נסתכל על פונקציית details. גם כאן אנחנו צריכים להפעיל את המערכת בעזרת using. נבצע פה פתיחת סוגריים וסגירה. אבל פה אנחנו לא צריכים לבצע שאילתא.
בואו נמחוק את השאילתא. גם את זה יש לנו משהו הרבה יותר פשוט אנחנו פונים לאובייקט שמחזיק את כל הקולקשנים הdb לתוך הcollection product ומייד קוראים לפונקציה first or default הפונקציה הזאת מקבלת אחד מהערכים שלה נקרא lambda expression זה בעצם פונקציה אנחנו רואים שהיא מקבלת פונקציה הפונקציה מקבלת product
ומחזירה ערך בולעני שמציין האם אנחנו באמת רוצים למצוא את המוצר הזה כן או לא אז כל מה שאנחנו אנחנו צריכים לעשות זה לדעת איך לעבוד עם Lambda Expression, ראינו את זה כבר ב-HTML Helpers, אז אנחנו צריכים לייצר פה משתנה עבור הפונקציה, אופרטור רחץ נקרא באנגלית Given That או בהינתן ש,
ואחריו אנחנו יוצרים את הגוף של הפונקציה, שזה ההשוואה שאנחנו רוצים לבצע. אנחנו רוצים לבדוק האם ה-Product ID שווה ל-ID שהתקבל לפונקציה.
אם כן, אוטומטית הפונקציה שאנחנו כתבנו תחזיר True, אין צורך לרשום פה ריטרן למרות שזה הגוף של הפונקציה ואנחנו היינו יכולים לרשום פה ריטרן אבל לא רושמים ריטרן אם יש רק שורה אחת אלא אם כן אנחנו עוטפים את זה בסוגריים בצורה כזאתי ואז ניתן לבצע את הריטרן כמובן שזה לא הגיוני לעשות את
זה עם שורה אחת לכן מה שאנחנו צריכים לעשות זה פשוט לקרוא לזה בצורה כזאתי. הפונקציה מחזירה true עם המוצר ומכיל את ה-ID שאנחנו רוצים ולכן ה-first or default תדע שהמוצר שהיא שלחה למשתנה הזה זה המוצר שאנחנו רוצים להחזיר והיא תחזיר אותו מ-first or default.
כאן אנחנו יכולים להחזיר את המוצר הזה ישירות ל-view. אז קיצרנו פה טיפה את הקוד, דרך אגב אם יש לנו שורה אחת אנחנו גם לא צריכים לבצע סוגריים מסולסלות אחרי ה-using, יש לנו פה עוד קיצור.
לאחר מכן יש לנו את הפונקציה create, גם כאן נדאג לקרוא לדיספוז, נקרא לזה בצורה כזאתי. יש לנו פה הוספה של המוצר לפרודקטס, בואו נראה שיטה אחרת.
שיטה אחרת אומרת דבר כזה, אנחנו פונים לדיבי, אנטיטי, אנחנו מדברים על ישות שנקראת פרודקט, שולחים את המוצר שהתקבל לפונקציה ומגדירים שהסטייט שלו שווה ל-added.
עכשיו, מה בדיוק עשינו פה? מה שעשינו פה זה דבר מאוד פשוט, הרי ה-collection products שמקודם עסקנו איתו, הוא לא מכיל באמת מוצרים, הוא לא מכיל שום מידע, זו סכמה של קולקשן.
אם מקודם עשינו add והוספנו אליו מוצר, הוא רק מציין לעצמו שמישהו הוסיף את המוצר הזה, ואז אם עושים save changes אז בעצם המוצר נשלח בחזרה לדאטאבייס.
כאן אנחנו מציינים משהו אחר, אנחנו מציינים שיש איזשהו מוצר שבעצם אנחנו מגדירים שהמצב שלו זה added, ולכן המוצר אמור לציין את עצמו ככזה שהתווסף.
ואז אם אנחנו נבצע את ה-save changes, המוצר אכן יישמר בדאטאבייס. פונקציית update, כאן גם כן עשינו משהו מיותר, עשינו שאילתה בשביל להביא את המוצר מהדאטאבייס.
כאן אנחנו יכולים לעשות משהו קצת שונה. אנחנו יכולים לעשות משהו דומה למה שעשינו עם פונקציית added, יותר נכון עם פונקציית delete, ליתר דיוק עם פונקציית details, ולהביא את המוצר בצורה כזאת.
פשוט אנחנו יכולים לקחת את כל הקוד הזה ולהביא אותו לכאן. בואו נראה מה יש לנו פה. שוב פעם, יצרנו אובייקט מה-entity data model,