PracticU

יצירת מודלים
ומחלקת Context
ממסד נתונים קיים

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

יצירת מודלים ומחלקת Context ממסד נתונים קיים
Entity Framework יודע לקרוא מסד נתונים קיים וליצור ממנו את המודלים ואת מחלקת ה-Context. התהליך נקרא scaffolding, והשיעור מראה אותו, ואיך מעדכנים את הקוד כשהמסד משתנה.
פקודת ה-scaffold
הפקודה רצה ב-Package Manager Console, עם הדגלים האלה:
1. Scaffold-DbContext: הפקודה הראשית, והדגלים מגדירים אותה.
2. -Provider: סוג מסד הנתונים, כאן Microsoft.EntityFrameworkCore.SqlServer. בבסיס אחר יהיה provider אחר.
3. -Connection: ה-connection string, בתוך מחרוזת. בפעם הראשונה הפקודה נכשלה בגלל שני backslash, והדובר הסיר אחד והעמיד את המחרוזת במרכאות.
4. -OutputDir: התיקייה בפרויקט שבה ייכתבו המודלים והקונטקסט, כאן Models.
5. -Namespace: ה-namespace שיאגד את המחלקות.
6. -DataAnnotations: כותב את ה-attributes של C# מעל המאפיינים והמחלקות. זה מראה איך בונים נכון בגישת Code First, ומאפשר גם להחזיר שינויים למסד בהמשך.
7. -Force: דורס מחלקות קיימות במקום לדלג עליהן, כך שאפשר להריץ שוב.
מה נוצר
1. המודלים: מחלקה Brand (ביחיד, למרות שהטבלה Brands), עם מפתח ראשי, Name עם האינדקס ה-Unique באותו שם, ו-navigation property אל InventoryItems. דומה ל-Type. ב-InventoryItem יש ID, BrandID, TypeID, Count, ומאפיינים אל Brand ו-Type עם foreign key.
2. מחלקת Context: יש בה שני constructors, OnConfiguring ו-OnModelCreating.
3. אזהרה: Entity Framework כתב את ה-connection string בתוך OnConfiguring, ומזהיר שיש שם מידע רגיש. כמו ב-Code First, כדאי להוציא אותו משם ל-appsettings או ל-App Secrets. הדובר מטפל בזה בהמשך.
שינוי במסד
1. שינוי שם עמודה: משנים ב-InventoryItems את Count ל-Quantity, ושומרים. ללא נתונים אבודים.
2. טבלה חדשה: Customers עם CustomerID (מפתח ראשי), FirstName (nvarchar 20), LastName (nvarchar 50) ו-Email (nvarchar 100) עם Unique Key בשם unique customer email.
3. עדכון הקוד: פותחים את ה-Package Manager Console, חזרה לחץ למעלה על אותה פקודה, ומריצים. הקבצים נדרסים, ב-InventoryItem יש Quantity, ויש מודל Customer.
שימו לב
אם הקוד כבר משתמש ב-Count, צריך להחליף אותו ידנית ל-Quantity בכל מקום, כי המודלים השתנו.
אחרי השיעור אפשר לייצר מודלים ו-Context ממסד קיים בפקודה אחת ולעדכן אותם כשהמסד משתנה.

פרקי ההרצאה: יצירת מודלים ומחלקת Context ממסד נתונים קיים

  1. 00:00

    מהו Scaffolding ליצירת מודלים

  2. 00:40

    דגלי Provider ו-Connection לפקודה

  3. 01:40

    דגלי Output Dir ו-Namespace

  4. 02:17

    הוספת Data Annotations בדגל

  5. 03:07

    דגל Force והרצת הפקודה

  6. 03:47

    תיקון שגיאות הקונקשן סטרינג

  7. 04:41

    המודלים שנוצרו ואזהרת ה-Sensitive Info

תמלול ההרצאה: יצירת מודלים ומחלקת Context ממסד נתונים קיים

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

  1. 00:02

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

  2. 00:14

    הקונספט הזה נקרא scaffolding כאשר scaffold זה פיגום או תשתית או שלד של משהו. קונספט scaffolding זה בעצם היצירה הזאת של המודלים מהדאטאבייס. אז אנחנו רוצים לפנות ל-package manager console ולבנות את הפקודה, לכתוב את הפקודה, scaffold מקף, בוא נראה שהוא מזהה לי, db-context.

  3. 00:40

    scaffold מקף db-context. הדגל הבא שהפקודה מקבלת זה provider, וזה בעצם איזה סוג של דאטאבייס אנחנו רוצים לעבוד איתו. זה יהיה Microsoft.entity-framework-core.sql- server.

  4. 01:01

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

  5. 01:15

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

  6. 01:28

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

  7. 01:43

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

  8. 02:01

    אז בואו נכתוב פה את הניימספייס הזה. לאחר מכן אנחנו נותנים דגל אחרון, כן, כל דגל זה פקודת קונפיגורציה לפקודה הראשית, וזה יהיה data annotations ברבים, וזה אומר שאנחנו רוצים ש-entity framework גם תכתוב data annotations, כל ה-C-Sharp Attributes האלה מעל ה-Properties ומעל הקלאסים,

  9. 02:26

    זה משהו מאוד מאוד חשוב. א', זה יראה לנו איך נכון לבנות את כל הדברים האלה אם אנחנו בונים את הכל ב-Code First, ובגלל שיש את כל ה-Data Annotations אנחנו נוכל אם נרצה להשתמש בתשתית הזאת בשביל לעדכן את ה-Data Base כאילו שאנחנו בפרויקט Code First.

  10. 02:45

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

  11. 02:53

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

  12. 03:18

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

  13. 03:47

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

  14. 04:02

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

  15. 04:13

    ה-Warning שקיבלנו הצהוב הזה מציינת שהמערכת הולכת לכתוב את הפרטים של ה-Connection String בתוך אובייקט הקונטקסט ופשוט מזהירה אותנו ואומרת לנו יש פה Sensitive Information שאנחנו כותבים וכמובן כדאי לנו מאוד ללכת ולהוציא את זה משמה בדיוק כמו שעשינו בפרויקט של ה-Code First לא כתבנו את ה-Connection String בתוך

  16. 04:41

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

  17. 04:58

    הטבלה בדטאבייס הייתה ברנדס ברבים ואנחנו רואים ש-NTT framework יצרה ברנד ביחיד. יש לנו את הברנד איי-די, אנחנו רואים שהוא מפתח ראשי, יש לנו את ה-Name, אנחנו רואים את הגודל שלו, יש לנו את ה-Navigation

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

ההרצאה הקודמת: יצירה וסידור פרויקט - עבור Database-First

ההרצאה הבאה: בחירת רשומות ונתונים - מ-Database עם #C

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

  • יצירת Context Object
  • Application Context
  • קבלת נתון ממסד נתונים - דוט נט NET Core.
  • מודלים למחזור חיי תוכנה

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

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