PracticU

מאפייני קונפיגורציה
Data Attributes

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

מאפייני קונפיגורציה Data Attributes
איך מסבירים ל-Entity Framework Core בדיוק איך לבנות את הטבלאות והעמודות? באמצעות Attributes על המודלים, חלקם מ-Data Annotations וחלקם מ-Entity Framework Core עצמו.
התקנה והאטריביוטים
1. חבילה: מתקינים את Microsoft.EntityFrameworkCore דרך Package Manager Console, והיא מופיעה ב-Dependencies (בהרצאה גרסה 7).
2. Key: מעל המפתח הראשי. הוא מספור אוטומטי שמתחיל ב-1, ומקבל 2, 3 וכן הלאה.
3. StringLength: בלי הגבלה Entity Framework מגדיר Max, וזה מסוכן כי אפשר להכניס מחרוזות ענקיות ולנפח את הדאטאבייס. לשם מתנה מגדירים 100 תווים, ואפשר להגדיל בהמשך.
4. Column(TypeName): decimal של .NET ב-SQL Server הופך לדצימל, אבל לכספים מגדירים money. גם string הופך ל-nvarchar (ה-n לתווים בכל שפה, ו-var לאורך משתנה).
5. Column(שם): כדי שהפרופרטי ייקרא בקוד ID אבל בדאטאבייס GiftID, מוסיפים [Column("GiftID")]. אותו דבר בקבוצת הגיל, כדי שהמפתח הזר והמפתח הראשי יהיו באותו שם.
6. Allow Null: אם למתנה לא חייבת להיות קבוצת גיל, מגדירים AgeGroupID כ-int?.
7. שמות: טבלאות ברבים ומפתחות ביחיד, והמחלקות ביחיד.
אילוצים ו-Index
1. אילוצים: מפתח ראשי (מונע כפילות), Not Null, Index ו-Unique.
2. Index: אטריביוט ברמת המחלקה מ-Entity Framework Core, על עמודה שמחפשים לפיה (למשל Name בקבוצת גיל). הדאטאבייס מחזיק מאגר ממוין שמזרז חיפושים, אבל מאט הכנסה, עדכון ומחיקה, ולכן לא שמים על כל השדות. על מפתח ראשי יש אינדקס אוטומטי.
3. nameof: כשכותבים את שם העמודה כמחרוזת ושינו את שם הפרופרטי, האינדקס נשבר. הפתרון: nameof(Name), שמתעדכן בעצמו ב-Rename (Ctrl+.).
4. Unique: IsUnique = true מונע ערכים זהים, והגיוני כאן כי אין שתי קבוצות גיל באותו שם. משתמשים בו גם בעמודות כמו אימייל או טלפון.
אחרי ההרצאה תוכלו לתאר ל-Entity Framework מפתחות, אורכי מחרוזת, סוגי עמודות, אינדקסים וייחודיות ישירות על המודלים.
השיעור הבא בקורס: מאפייני ניווט בין טבלאות Entity Framework Core

פרקי ההרצאה: מאפייני קונפיגורציה Data Attributes

  1. 00:00

    תפקיד ה-Attributes בבניית הטבלה

  2. 00:55

    Data Annotations מול Entity Framework

  3. 01:46

    הגדרת מפתח ראשי עם Key

  4. 02:22

    הגבלת אורך מחרוזת עם String Length

  5. 03:17

    הגדרת סוג Money לעמודת המחיר

  6. 05:01

    הגדרת עמודה כ-Allow Null

  7. 05:35

    קביעת שם העמודה עם Column

תמלול ההרצאה: מאפייני קונפיגורציה Data Attributes

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

  1. 00:02

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

  2. 00:23

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

  3. 00:43

    זה מתבצע על ידי משהו שנקרא Data Annotations Attributes, כאשר חלק מתבצעים על ידי Data Annotation Attributes וחלק מתבצעים על ידי אטריביוטים ששייכים לאנטיטי פריימורק.

  4. 00:58

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

  5. 01:13

    לכן אנחנו צריכים עכשיו לגשת לפה ולהתקין install package at microsoft.entity framework core כי אנחנו באנטיטי פריימורק core. זה פאקד שקודם כל אנחנו בוודאות הולכים להשתמש עם כל מיני דברים שיש בתוכו, שייך ל- entity framework core.

  6. 01:33

    התקנו. בואו נסגור. נסתכל רגע שהוא אכן קיים פה ב-dependencies. packages, הנה הוא, גרסה הכי חדשה, כרגע זה 7. ואנחנו יכולים להתחיל לעבוד.

  7. 01:46

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

  8. 01:58

    הנה אנחנו רואים את זה פה. זה אומר ל-Entity Framework ול-Code First בעצם שבונה את ה-Database שהדבר הזה זה מספור אוטומטי רץ, זה ה-Default שלו, הוא יתחיל מ-1, יעלה ל-2, 3 וכדומה, מפתח ראשי.

  9. 02:13

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

  10. 02:33

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

  11. 02:44

    אם אנחנו מגדירים אטריביוט שנקרא String Length, אנחנו יכולים להגיד לו, תשמע, מה הגיוני שיהיה המקסימום של Name עבור GIFT?

  12. 02:55

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

  13. 03:06

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

  14. 03:18

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

  15. 03:37

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

  16. 04:02

    טיפה שונים מבחינת השמות שלהם לדוגמה בתוך sql server אין סוג נתונים שנקרא סטרינג סוג הנתונים שיינתן שם יהיה n var char ה-n זה אומר שזה national שזה יכול להיות כל תו מכל השפות National Characters, זה אומר גם עברית לדוגמה, אם נרצה מתנה בעברית, צרפתית, אנגלית, רוסית, ערבית, לא רק אנגלית.

  17. 04:27

    אם זה היה var char זה היה רק אנגלית. var זה אומר שזאת מכרוזת משתנה, זה יכול להיות שהיא תתפוס לי שני תווים, או 20 תווים, או 100 תווים, כמה שהיא צריכה, לא מכרוזת שהיא תמיד באורך קבוע, וchar זה כמובן שהיא בנויה מcharacters, אז הוא יגדיר לי את זה בצורה כזאת.

  18. 04:43

    זה סוג הנתונים האמיתי שיהיה ב-database מהדבר הזה. כמובן זה לא סטרינג, אז יש לנו פה טיפה שוני בשמות.

  19. 04:49

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

  20. 05:01

    אז זה יהיה סוג הנתונים שיוגדר עבור ה-price. מה עוד אנחנו רוצים עבור ה-age group ID? בואו נניח שיש מתנה שהיא לא שייכת לגיל מסוים.

  21. 05:15

    יכולה להיות לכל הגילאים. אולי במקרה כזה אנחנו כן רוצים להגיד, אוקיי, אתה לא חייב לתת לי Age Group ID. זאת אומרת, אנחנו כן רוצים להגדיר אותו כ-Allowed Null.

  22. 05:26

    טוב, בואו נשים פה סימן שאלה, וכעת זה Allowed Null. דבר נוסף שכדאי לראות איך עושים. יכול להיות שאתם אומרים, רגע, אני רוצה בדאטאבייס ששם העמודה של המפתח תהיה Gift ID. זה משהו שהוא מאוד מאוד מומלץ עבור דאטאבייסים.

  23. 05:44

    הנה לדוגמה, נקרה כזה, ב-H Groups אנחנו רוצים שבדאטאבייס העמודה תהיה H Group ID והמפתח הזר שלנו אנחנו רוצים אותו באותו השם H Group ID אז זה מאוד קל להסתכל ולראות שזה בעצם הדברים שמקושרים אחד לשני בדאטאבייס עצמו מה שאנחנו רואים פה זה כמובן ציור שהולך להיות בדאטאבייס אבל עבור אובייקט מסוג גיפט אולי אני רוצה

  24. 06:11

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

  25. 06:35

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

  26. 06:55

    בואו נעשה את אותו הדבר גם ל-age group. בואו נראה.

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

ההרצאה הקודמת: יצירת מחלקות - Model Classes - לתיאור הטבלאות שבמסד הנתונים

ההרצאה הבאה: מאפייני ניווט בין טבלאות - Entity Framework Core

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

  • Attributes
  • בדיקות קונפיגורציה
  • Contract Attributes
  • מאפייני טרנזקציה - ACID

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

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