PracticU

שימוש ב-Stored Procedure
על-ידי DTO

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

שימוש ב-Stored Procedure על-ידי DTO
ההרצאה פותרת את הקריסה מההרצאה הקודמת: בונים מחלקת DTO שמתאימה בדיוק לנתונים ש-Stored Procedure מחזירה, ומחברים אותה ל-DbContext.
השלבים העיקריים
1. מהו DTO: Data Transfer Object היא מחלקה שמכילה בדיוק את מה שרוצים להחזיר ממקום מסוים, כמו Stored Procedure או שרת מרוחק. בונים אותה בהתאם למידע שהמקור מחזיר.
2. יצירת המחלקה: בתיקיית המודלים מוסיפים מחלקה בשם PriceGiftDTO. נהוג לסיים את השם ב-DTO, כך שמי שקורא מבין שהיא משרתת גישה למקור חיצוני.
3. המאפיינים: מעתיקים מ-Gift את Name ו-Price ומוסיפים Vat מסוג decimal. אין צורך במפתח ראשי, כי זו לא טבלה בדאטה בייס.
4. רישום בקונטקסט: ב-DbContext מוסיפים DbSet מסוג PriceGiftDTO. מקובל לתת לו את שם ה-Stored Procedure עם הסיומת Results, כלומר GetGiftsByPriceRangeResults.
5. שינוי הקריאה: בפרוגרם קוראים ל-Procedure דרך האוסף החדש במקום דרך gifts, ומציגים שם, מחיר ומע"מ בלי מזהה.
6. בדיקת התוצאה: התוכנית לא קורסת, והמחירים בין 10 ל-40 מוצגים ממוינים בסדר עולה, עם השמות והמע"מ.
שימו לב
המרצה מציין שבגרסאות מוקדמות של Entity Framework זה נבנה אוטומטית, כולל ב-Database First, אבל התמיכה הופסקה. בגרסה 7 צריך לכתוב זאת ידנית, והוא לא מכיר פתרון אחר. הוא אומר שמדברים על תיקון בגרסה 8, אך אף אחד לא יודע.
אפשר עכשיו לקרוא ל-Stored Procedure שמחזירה עמודות שונות ממודל קיים, בעזרת DTO ייעודי.
השיעור הבא בקורס: יצירת Stored Procedure לביצוע עדכון נתונים - EF

פרקי ההרצאה: שימוש ב-Stored Procedure על-ידי DTO

  1. 00:00

    מהו Data Transfer Object

  2. 00:37

    בניית מחלקה ייעודית לנתונים

  3. 01:12

    מדוע בונים את ה-DTO ידנית

  4. 01:51

    הוספת מחלקת ה-DTO

  5. 02:48

    הגדרת מאפייני ה-DTO

  6. 03:41

    ייצוג Procedure Results בקונטקסט

  7. 04:16

    קישור ל-Get Gifts By Price Range

תמלול ההרצאה: שימוש ב-Stored Procedure על-ידי DTO

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

  1. 00:02

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

  2. 00:18

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

  3. 00:35

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

  4. 00:47

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

  5. 01:13

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

  6. 01:40

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

  7. 01:58

    אז אני ניגש לאזור של המודלים ומצרף מחלקה ואני קורא לה בשם שמתאר את מה אני רוצה להחזיר. אני רוצה להחזיר מידע של מתנה לפי מחיר, לפי טווח מחירים. בואו נקרא לה Price Gift ונהוג לסיים ב-DTO.

  8. 02:20

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

  9. 02:39

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

  10. 03:10

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

  11. 03:26

    בעבר הדבר הזה היה נבנה לנו כאשר היינו משתמשים ב-Database First, גם ב-Database First היום הוא לא נבנה. אני מאמין שבהמשך יטפלו בבעיה הזאת.

  12. 03:37

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

  13. 03:48

    אנחנו רוצים לבוא לפה ולייצג Stored Procedures, Procedure Results. כלומר, את אותן תוצאות שחוזרות מ-Stored Procedures.

  14. 04:02

    ויש לנו פה Public, DB-Set, האובייקט שלנו נקרא PriceGiftDTO. מה שמקובל זה פשוט לרשום פה את השם של ה-Stored Procedure.

  15. 04:16

    בואו נאתר את אותו שם. זה היה כאן, הנה השם, זה אני לא צריך, זה אני לא צריך, זה השם. Get Gifts by Price Range עם הסיומת Results.

  16. 04:32

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

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

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

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

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

  • הכל על Stored Procedure
  • קריאה ל-Stored Procedure
  • שימוש ב-Stored Procedures
  • שימוש ב-useEffect - חלק 1

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

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