PracticU

הסבר מעמיק על Context
Entity Framework Core

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

הסבר מעמיק על Context Entity Framework Core
בעבודה עם ה-context ב-Entity Framework Core יש מגבלות שחשוב להכיר, ואחת הנפוצות היא שגיאה בניסיון לעשות Attach לאובייקט שהקונטקסט כבר מכיר.
מה קורה בדוגמה
1. הניסוי: רוצים למחוק מתנה עם ID 2 (במסד יש מתנה אחת עם ID 1 ואחת עם ID 2). אפשר למחוק אותה רגיל, אבל אם שורה לפני כן מביאים מהמסד את כל המתנות ואז עושים Attach לאובייקט עם אותו ID, התוכנית קורסת.
2. ההודעה: The instance of entity type Gift cannot be tracked because another instance with the same key value for Id is already being tracked. כלומר הקונטקסט כבר מכיר את האובייקט, שומר עליו ועוקב אחריו.
מה לומדים מזה
1. ייחודיות מפתחות: הקונטקסט שומר שהמפתח הראשי יהיה ייחודי. אם הבאנו נתונים, הם כבר קיימים בו, ואי אפשר להוסיף אובייקט נוסף עם אותו מפתח. אפשר לעדכן את מה שכבר שם.
2. הקונטקסט מתחיל ריק: כשיוצרים אותו אין בו מידע, וכל נתון שהבאנו נמצא בו מעכשיו.
3. לא מערבבים שיטות: בוחרים אחת משתי השיטות. או שמביאים את המידע (הכל או מתנה בודדת) ומעדכנים או מוחקים אותו, או שלא מביאים כלום ויוצרים אובייקט עם Attach ואז מוחקים ו-SaveChanges.
4. קונטקסט חדש לכל פעולה: לכן נהוג ליצור אובייקט קונטקסט (עם using), לבצע פעולה אחת וסגור אותו. אם צריך גם להציג וגם למחוק, מפצלים לשתי פונקציות שלכל אחת קונטקסט משלה. זה קורה בלחיצה על כפתור באפליקציית חלונות או בפונקציה בשרת שניגשת למסד, וכל פעם הקונטקסט נקי ממידע קודם.
מי שנתקל בשגיאה כזו יודע שהסיבה היא ערבוב בין שתי שיטות העבודה או Attach למידע שכבר קיים, ויכול לבחור בשיטה הנכונה.
השיעור הבא בקורס: הרצת שאילתת SQL לעדכון הנתונים ב-Entity Framework Core

פרקי ההרצאה: הסבר מעמיק על Context Entity Framework Core

  1. 00:00

    מגבלות בעבודה עם הקונטקסט

  2. 00:41

    הבאת מידע לפני מחיקה

  3. 01:15

    ביצוע Attach לאובייקט

  4. 01:54

    שגיאת המפתח שכבר נעקב

  5. 02:29

    ייחודיות המפתחות הראשיים

  6. 03:04

    עדכון לעומת הוספת רשומה

  7. 03:44

    בחירת שיטת עבודה אחת

תמלול ההרצאה: הסבר מעמיק על Context Entity Framework Core

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

  1. 00:02

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

  2. 00:15

    בואו נסתכל רגע על הדאטאבייס ונראה שיש לנו כרגע מתנה QtDoll עם ה-ID 1, RedBimba עם ה-ID 2. אני חוזר ומה שאני רוצה לעשות זה למחוק עכשיו את ה-ID 2. אין שום סיבה שאנחנו לא נצליח לעשות את זה.

  3. 00:31

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

  4. 00:50

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

  5. 01:09

    מה שאנחנו מנסים לעשות זה לצרף to attach עם השיטה השנייה, בין אם זה עם עדכון ובין אם זה אם אני מבצע מחיקה. ברגע שאני מבצע attach לאיזשהו אובייקט, אז כמובן אני לא אוכל לעשות את זה אם ה-ID שלו כבר קיים לנו.

  6. 01:29

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

  7. 01:43

    הנה שתי המתנות שיש לנו בדאטאבייס, ואז מה שהוא כותב לנו זה The instance of entry type gift cannot be tracked because another instance with the same key value for ID is already being tracked.

  8. 01:59

    מה זאת אומרת being tracked, זה אומר שכבר צירפנו אותו לקונטקסט והקונטקסט עכשיו מכיר אותו, שומר עליו, עוקב אחריו, הוא בקש של הקונטקסט. ואז הוא ממשיך.

  9. 02:10

    When attaching existing entities, ensure that only one entity instance with a given key value is attached. זאת אומרת, אם אתה מבצע attach, אז אתה לא יכול לעשות את זה במידה וכבר יש לך איזשהו אובייקט עם אותו ה-ID.

  10. 02:29

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

  11. 02:51

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

  12. 03:02

    אתה רוצה אולי לעדכן? אין בעיה, אם אתה רוצה לעדכן, אז הוא כבר קיים לי. אל תוסיף לי אותו, הוא כבר נמצא לי בקולקשן.

  13. 03:11

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

  14. 03:32

    זאת אומרת שיש לנו את השיטה הראשונה, אנחנו גם רואים שאנחנו לא רוצים לערבב בין שתי השיטות האלה. אנחנו לא גם מביאים בשיטה הראשונה מתנה, ואז מעדכנים אותה בשיטה השנייה עם ה-touch.

  15. 03:44

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

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

ההרצאה הקודמת: מחיקת רשומה - שיטה שניה

ההרצאה הבאה: הרצת שאילתת SQL לעדכון הנתונים - ב-Entity Framework Core

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

  • שימוש ב-Entity Framework - חלק 1
  • הסבר על Console - דוט-נט Framework vs Core
  • הסבר על WinForms - דוט-נט Framework vs Core
  • הסבר מעמיק על חלון Console

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

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