PracticU

יצירה ושימוש ב-Stored Procedure
לעדכון נתונים EF - Entity Framework

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

יצירה ושימוש ב-Stored Procedure לעדכון נתונים EF - Entity Framework
ב-Database First, כמו ב-View, קודם בונים את ה-Stored Procedure במסד ורק אחר כך משתמשים בה בפרויקט. בשיעור הזה בונים פרוצדורה שמוסיפה לקוח, וקוראים לה דרך Service.
השלבים העיקריים
1. הגדרת הפרוצדורה: CREATE OR ALTER PROCEDURE עם הפרמטרים @FirstName (nvarchar 20), @LastName (nvarchar 50) ו-@Email (nvarchar 100). בגוף: SET NOCOUNT ON כדי שלא יוצגו הודעות על מספר שורות שהושפעו, ו-INSERT INTO Customers עם הערכים שהתקבלו. כדאי להתחיל ב-USE של Clothing Store, ולהפריד עם GO.
2. באג שנתגלה: בהרצה מתקבלת שגיאה שמספר הערכים לא תואם את מספר העמודות. הסיבה היא ש-CustomerID לא הוגדר כמספור אוטומטי. ב-Design משנים Is Identity ל-Yes, שומרים, וההרצה מצליחה. אחרי רענון רואים את AddCustomer.
3. אין scaffolding לפרוצדורות: בהרצת scaffolding לא נוצר שום דבר שקשור לפרוצדורה. לפי הדובר, Entity Framework 7 לא תומך בזה, והוא מקווה שיתקנו. בגרסאות קודמות נוצרה פונקציה ב-Context אפשר היה לקרוא לה ישירות.
4. Service: יוצרים CustomersService שמממש IDisposable ומחזיק את אובייקט ה-Context, עם Dispose שלו.
5. מתודת AddCustomer: מקבלת FirstName, LastName ו-Email, וקוראת ל-db.Database.ExecuteSql עם מחרוזת מעוצבת: קריאה ל-AddCustomer עם שלושת הערכים. מתודה נוספת מקבלת אובייקט Customer וקוראת לראשונה עם המאפיינים שלו, כך שיש שתי אפשרויות.
6. בדיקה: בתוכנית מוסיפים שלושה לקוחות (Bart Simpson, Lisa ו-Homer). בטבלת Customers במסד רואים שלושתם, והם נכנסו דרך הפרוצדורה.
עכשיו אפשר ליצור Stored Procedure להוספה במסד ולהפעיל אותה מתוך פרויקט Database First בעזרת ExecuteSql.
השיעור הבא בקורס: יצירה ושימוש ב-Stored Procedure המתאימות למחלקת Model

פרקי ההרצאה: יצירה ושימוש ב-Stored Procedure לעדכון נתונים EF - Entity Framework

  1. 00:00

    בניית Stored Procedure בגישת Database First

  2. 00:44

    הגדרת SET NOCOUNT ו-Insert

  3. 01:39

    תיקון עמודת Identity בטבלת Customers

  4. 02:36

    חוסר תמיכת EF ב-Scaffolding של Procedures

  5. 03:46

    יצירת Customers Service

  6. 04:24

    קריאה לפרוצדורה עם ExecuteSql

תמלול ההרצאה: יצירה ושימוש ב-Stored Procedure לעדכון נתונים EF - Entity Framework

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

  1. 00:02

    אנחנו עוברים לשימוש ב-Stored Procedures, אותו הדבר כמו Vue. אם אנחנו בפרויקט Database First, אז אנחנו קודם כל בונים את ה-Stored Procedure בתוך ה-Database.

  2. 00:14

    בואו ניקח query, בואו נגדיר לעצמנו Create or Alter Procedure ונתחיל בפרוצדורה שמוסיפה לקוח חדש. נקבל First Name, זה יהיה nvarchar 20, זה מה שאם אני זוכר נכון הגדרנו בואו נקבל שטרודל last name זה יהיה nvarchar 50 בואו נקבל e-mail זה היה nvarchar 100 ואת המילה as נוריד רק כאן שנוכל לראות בצורה יותר

  3. 00:48

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

  4. 01:04

    ו-insert into customers את ה-values שהתקבלו. שטרודל first name, שטרודל last name, שטרודל e-mail.

  5. 01:15

    חשוב go, חשוב פה בהתחלה use closing store ו-go. ויש לנו כרגע stored procedure שמוסיפה לקוח. אנחנו רוצים to execute it.

  6. 01:26

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

  7. 01:47

    לכן אם הוא אומר לי דבר כזה אני מניח ששכחתי להגדיר אותו כמספור אוטומטי רץ. אז בואו נלך לדיזיין, בואו נתפוס את הדבר הזה, בואו נרד פה למטה ונחפש is identity אני רואה שהוא no בואו נגדיר אותו ל-yes ובואו נשמור את זה וננסה שוב פעם יופי עכשיו אנחנו רואים שהוא הצליח יש לנו את ה-stored procedure בואו

  8. 02:11

    ניגש לפה נרפרש stored procedures ויש לנו add customer על הדרך גם תיקנו את זה באג עם המספור האוטומטי הרץ אנחנו רוצים כבר בסרטון הזה להשתמש בסטורט פרסיג'ר הזו ולכן אנחנו רוצים קודם כל לבוא לפה.

  9. 02:31

    אין לנו מה לבצע סקאפולדינג מפני שאנחנו לא מקבלים מהסטורט פרסיג'ר דבר כי עדיין אנטיטי פריימורק 7 כפי שאמרנו לא תומכת בסקאפולדינג אוטומטי של סטורט פרסיג'ר אבל רק לצורך הדוגמה בואו נעשה את זה נריץ סקאפולדינג ונראה שהוא מייצר לי שוב פעם את כל החבר'ה האלה אבל אבל שום דבר שקשור ל-Stored Procedure לא קיים

  10. 02:57

    כאן. הנה הקונטקסט, אם אנחנו נסתכל על הקונטקסט אנחנו בעצם לא נראה שום דבר שקשור לשום-Stored Procedure.

  11. 03:05

    ננסה לעשות את זה אחר כך גם עם-Stored Procedure שמחזירות מידע ונראה שעדיין Entity Framework לא תומכת בסקאפולדינג כזה וזה חבל.

  12. 03:12

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

  13. 03:25

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

  14. 03:42

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

  15. 04:09

    ונבצע dispose לאובייקט הקונטקסט. כעת אנחנו רוצים להוסיף פונקציה AddCustomer. מה הפונקציה צריכה לעשות? הפונקציה מקבלת מה שצריך, ושולחת את זה לדאטאבייס על ידי ה-Store Procedure.

  16. 04:24

    אז בואו נקבל String First Name, String Last Name, String E-Mail, ואנחנו רוצים לקרוא ל-Store Procedure ולשלוח אליה.

  17. 04:36

    אז יש לנו את ה-db.database.executeSQL. אנחנו רוצים לייצר מחרוזת כזאת, Formatable String, לקרוא ל-AddCustomer, ולשלוח שלושה ערכים שזה הערכים למעלה first name last name email בצורה כזאת וזהו עכשיו מה קורה אם

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

ההרצאה הקודמת: שימוש ב-View - Entity Framework

ההרצאה הבאה: יצירה ושימוש ב-Stored Procedure - המתאימות למחלקת Model

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

  • הכל על Stored Procedure
  • קריאה ל-Stored Procedure
  • שימוש ב-Entity Framework - חלק 1
  • Automation Framework

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

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