PracticU

עדכון רשומה - שיטה שניה

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

עדכון רשומה - שיטה שניה
בשיטה הראשונה לעדכון יש שתי פניות לדאטאבייס: שאילתת select להבאת האובייקט ושאילתת update בשמירה. ההרצאה מראה שיטה שניה שמסתפקת בפנייה אחת, ומסבירה את מצבי האובייקט (Entity State) שמאחוריה.
מצבי האובייקט (Entity State)
1. בדיקת המצב: משתמשים ב-db.entry(gift).State. אובייקט שהובא מהדאטאבייס נמצא במצב Unchanged.
2. שינוי ערך: אם משנים ערך בפועל, המצב הופך ל-Modified. כשהערך זהה למקורי, המצב נשאר Unchanged. אחרי SaveChanges המצב חוזר ל-Unchanged.
3. הערכים האפשריים: ה-enum כולל Added, Deleted, Detached, Modified ו-Unchanged. אובייקט שנוצר ידנית ולא קשור לקונטקסט הוא Detached.
השיטה השניה לעדכון
1. יצירת אובייקט ידנית: יוצרים new Gift עם ה-ID הרצוי (4), שם חדש (learning chess), מחיר 40 ו-AgeGroupID 2. בלי הבאה מהדאטאבייס.
2. חיבור לקונטקסט: קוראים ל-db.gifts.Attach(gift). המצב הופך ל-Unchanged, ואם שומרים עכשיו לא קורה כלום.
3. סימון כמשונה: קובעים db.entry(gift).State = EntityState.Modified ואז SaveChanges. ה-Entity Framework מייצרת שאילתת update, ובדאטאבייס רואים את השינוי.
יתרונות וחסרונות
- שיטה ראשונה: שתי פניות לדאטאבייס, אבל נוחה כי מקבלים את האובייקט וצריך לעדכן רק חלק מהשדות.
- שיטה שניה: פנייה אחת בלבד.
- בשיטה השניה לא ידוע אם הפריט קיים. אפשר לבדוק לפני כן עם if (!db.gifts.Any(g => g.ID == id)) ולהציג no such gift. הבדיקה מהירה מעט משליפה מלאה, אך היא עדיין גישה לדאטאבייס.
- אם בטוחים שהפריט קיים, אין צורך בבדיקה.
כעת אפשר לבחור בין שתי הטכניקות לעדכון רשומה בהתאם לצורך.
השיעור הבא בקורס: מחיקת רשומה - שיטה ראשונה

פרקי ההרצאה: עדכון רשומה - שיטה שניה

  1. 00:00

    החיסרון של שתי פניות לדאטאבייס

  2. 01:17

    בדיקת ה-Entity State עם db.entry

  3. 02:29

    המצבים Unchanged ו-Modified

  4. 03:07

    סקירת ה-states האפשריים

  5. 04:05

    עדכון בפנייה אחת לדאטאבייס

  6. 04:59

    חיבור אובייקט עם Attach

  7. 05:43

    אובייקט במצב detached

תמלול ההרצאה: עדכון רשומה - שיטה שניה

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

  1. 00:02

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

  2. 00:12

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

  3. 00:29

    ככה אנחנו יכולים לבצע את זה בעזרת SQL סטנדרטית. אבל מה שעשינו עכשיו זה שאילתא ראשונה תביא לי את האובייקט, זאת שאילתת סלקט, ואחר כך עשינו עדכון כלשהו, ואז save changes, שאילתה שנייה של update.

  4. 00:45

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

  5. 00:57

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

  6. 01:09

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

  7. 01:23

    ועכשיו מה שכדאי להראות זה משהו שנקרא Entity State של האובייקט הזה. בואו נלך ל-db.entry ופונקציה שאומרת אני אאתר לך איזשהו אובייקט שקיים אצלי והאובייקט צריך להיות קיים.

  8. 01:40

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

  9. 01:50

    אז אני הולך לאנטרי ואני נותן לו את האובייקט gift ואני אומר לו תשמע תגיד לי מה ה-state שלו. ה-state אם אני מסתכל אני רואה שהוא מסוג רואים את זה פה entity.state בואו נריץ את זה כמובן שהוא יעדכן את עצמו והוא יגיד לי Unchanged Unchanged זה אומר עדיין אין לו שינוי וזה

  10. 02:15

    הגיוני כי רק הבאתי אותו מהדאטאבייס אז הוא Unchanged בואו ניקח את השורה הזאת ואחרי שעדכנו רק את ה-Name, נדפיס אותה שוב פעם. נריץ, ומה שהוא יגיד לנו זה Changed.

  11. 02:29

    תשמע, עוד לא עשית בה שום שינוי. היה לך Amazing Children Chess, נשאר Amazing Children Chess. בואו נשים פה שתיים, נריץ, ו-Modified. רגע, רגע, יש לנו פה איזשהו State אחר.

  12. 02:46

    אוקיי, זה Modified, בואו נשנה ל-3 בשביל שנקבל שוב Modified, הבנתי, ונשים את זה אחרי ה-Save Changes, נריץ ויש לנו Unchanged, Modify ושוב פעם Unchanged בגלל ששמרנו לדאטאבייס אז זה מסונכרן עם הדאטאבייס.

  13. 03:07

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

  14. 03:31

    אותו לשום מקום, modified ו-unchanged אלה הסטייטים שקיימים לכל אובייקט ב-entity framework שאו שיצרנו אותו מקומית או שהבאנו אותו מהדאטאבייס או שעשינו עליו איזושהי פעולה וכדומה.

  15. 03:45

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

  16. 04:03

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

  17. 04:16

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

  18. 04:32

    מה שאנחנו רוצים לבצע זה לייצר גיפט בעצמנו. גיפט, גיפט שווה ניו. ונגיד לו ה-ID שלך זה ה-ID הזה, ה-NAME זה בוא נגיד משהו אחר Learning Chess, ה-Price בוא ניתן לו 40 ו-H Group ID בוא ניתן לו 2. Good, עכשיו מה שאנחנו רוצים לעשות אנחנו רוצים לעבוד כאילו על Entity Framework

  19. 05:03

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

  20. 05:21

    אם אני יוצר אובייקט משלי הוא מה שנקרא detached הוא לא שייך לדאטאבייס בכלל בואו נציג את הסטייט שלו נוריד את אלה את אלה אנחנו כבר לא צריכים ולפני שאני אעשה save changes אני רק רוצה לראות מה הסטייט של האובייקט החדש הזה.

  21. 05:40

    נריץ ומה שהוא אומר לנו זה detached מה אני לא הגעתי מהדאטאבייס אני לא יודע מאיפה הבאת אותי יצרת סתם איזה אובייקט אני מנותק לגמרי בסדר מה אנחנו רוצים לעשות אנחנו רוצים לעבוד על entity framework ולהגיד לה כאילו שכן הבאנו את האובייקט הזה מהדאטאבייס אז אנחנו באים לdb.gifts.attach בוא תחבר אותו בצורה סינתטית כאילו הבאת אותו מהדאטאבייס הנה הגיף

  22. 06:08

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

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

ההרצאה הקודמת: עדכון רשומה - שיטה ראשונה

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

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

  • עדכון של Kali
  • שיטה לניהול Reducer אחד בלבד
  • עדכון נתונים ב-MongoDB
  • CLR - פונקצית עדכון

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

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