
Microsoft.EntityFrameworkCore דרך Package Manager Console, והיא מופיעה ב-Dependencies (בהרצאה גרסה 7).decimal של .NET ב-SQL Server הופך לדצימל, אבל לכספים מגדירים money. גם string הופך ל-nvarchar (ה-n לתווים בכל שפה, ו-var לאורך משתנה).ID אבל בדאטאבייס GiftID, מוסיפים [Column("GiftID")]. אותו דבר בקבוצת הגיל, כדי שהמפתח הזר והמפתח הראשי יהיו באותו שם.AgeGroupID כ-int?.Name בקבוצת גיל). הדאטאבייס מחזיק מאגר ממוין שמזרז חיפושים, אבל מאט הכנסה, עדכון ומחיקה, ולכן לא שמים על כל השדות. על מפתח ראשי יש אינדקס אוטומטי.nameof: כשכותבים את שם העמודה כמחרוזת ושינו את שם הפרופרטי, האינדקס נשבר. הפתרון: nameof(Name), שמתעדכן בעצמו ב-Rename (Ctrl+.).IsUnique = true מונע ערכים זהים, והגיוני כאן כי אין שתי קבוצות גיל באותו שם. משתמשים בו גם בעמודות כמו אימייל או טלפון.הטקסט המלא של הדקות הראשונות בהרצאה «מאפייני קונפיגורציה Data Attributes» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
הדבר הבא שאנחנו צריכים לבצע זה להגדיר סדרה של Attributes, C-Sharp Attributes עבור כל מיני מאפיינים כאן, לא חייבים את כולם, בכדי לתאר לאנטיטי פריימורק איך בדיוק להגדיר את אותן עמודות ואת אותה טבלה בדאטאבייס.
כלומר, למה שאנטיטי פריימורק תחשוב שהדבר הזה זה לדוגמה מפתח ראשי? ולמה בדיוק אנטיטי פריימורק תחשוב שאולי הסוג של הפרייס הוא סוג מסוים שאני צריך להגדיר בדאטה בייס? אנחנו צריכים להגדיר לאנטיטי פריימורק בדיוק איך לבנות את הדאטה בייס מהמודלים האלה.
זה מתבצע על ידי משהו שנקרא Data Annotations Attributes, כאשר חלק מתבצעים על ידי Data Annotation Attributes וחלק מתבצעים על ידי אטריביוטים ששייכים לאנטיטי פריימורק.
כלומר, יש קבוצה של אטריביוטים ששייכים לניימספייס אחד שהוא לא קשור לאנטיטי פריימורק, הוא נקרא data annotations וסדרה של פקודות או אטריביוט שאנחנו כן משתמשים באטריביוט ששייכים לאנטיטי פריימורק.
לכן אנחנו צריכים עכשיו לגשת לפה ולהתקין install package at microsoft.entity framework core כי אנחנו באנטיטי פריימורק core. זה פאקד שקודם כל אנחנו בוודאות הולכים להשתמש עם כל מיני דברים שיש בתוכו, שייך ל- entity framework core.
התקנו. בואו נסגור. נסתכל רגע שהוא אכן קיים פה ב-dependencies. packages, הנה הוא, גרסה הכי חדשה, כרגע זה 7. ואנחנו יכולים להתחיל לעבוד.
הדבר הראשון שאנחנו מגדירים זה האטריביוט מעל המפתח הראשי, שאומר שהוא מפתח ראשי. זה יהיה key. ושימו לב שזה מגיע לדוגמה מהקבוצה ששייכת ל-data annotations.
הנה אנחנו רואים את זה פה. זה אומר ל-Entity Framework ול-Code First בעצם שבונה את ה-Database שהדבר הזה זה מספור אוטומטי רץ, זה ה-Default שלו, הוא יתחיל מ-1, יעלה ל-2, 3 וכדומה, מפתח ראשי.
הדבר הבא שאנחנו רוצים להגדיר זה מה מקסימום התווים שניתן להכניס לתוך המחרוזת הזאת. אם אנחנו לא נגדיר את זה, אז-Entity Framework ייתן לנו ב-Database את הערך Max, כאילו המספר התווים הוא מקסימום של... שאפשר, אין פה שום הגבלה וזה קצת ריסקי.
כי אם נניח יקרה מצב שמישהו מנסה לפרוץ לנו למערכת ולהתחיל לזבל את הדאטאבייס, הוא יכול להכניס כל ערך שהוא רוצה, גם הכרזות עצומות, וזה סתם מנפח את הדאטאבייס.
אם אנחנו מגדירים אטריביוט שנקרא String Length, אנחנו יכולים להגיד לו, תשמע, מה הגיוני שיהיה המקסימום של Name עבור GIFT?
אוקיי, חמש, קטן מדי, יכול להיות ששם הוא יותר גדול מחמישה תווים. אז בואו נגיד לו, תשמע, תן לי מאה תווים, אולי מישהו נותן איזה שם של מתנה ארוכה כזאת.
לא הגיוני יותר ממאה תווים, לקחנו פה איזה מי רווח. אם בהמשך אנחנו נראה שוואלה, מאה לא מספיק, תמיד אפשר להגדיל את זה. זה בעצם עושה לנו איזה חסימה כזאת, אי אפשר יהיה להכניס יותר ממאה תווים עבור הנעים.
הדבר הבא זה הפרייס, מה הבעיה עם הפרייס? הבעיה עם הפרייס היא שב.NET טיפול בכספים זה טיפוס שנקרא דצימל אבל במסד הנתונים של sql server שאנחנו הולכים לעבוד איתו יש טיפוס יותר מדויק והוא נקרא money.
money זה המקביל לדצימל זאת אומרת אם אני לא אגדיר שהסוג הזה הולך להיות בדטאבייס money אז מה שNTT framework תעשה היא פשוט תגדיר אותו כדצימל בדטאבייס שזה פחות מתאים. שוב זה טיפה מבלבל אני יודע כי זה נראה הגיוני שלי יש סוג נתונים דצימל אז אני רוצה שבדאטאבייס יהיה לי סוג נתונים דצימל אבל סוגי הנתונים במערכות יכולים להיות
טיפה שונים מבחינת השמות שלהם לדוגמה בתוך sql server אין סוג נתונים שנקרא סטרינג סוג הנתונים שיינתן שם יהיה n var char ה-n זה אומר שזה national שזה יכול להיות כל תו מכל השפות National Characters, זה אומר גם עברית לדוגמה, אם נרצה מתנה בעברית, צרפתית, אנגלית, רוסית, ערבית, לא רק אנגלית.
אם זה היה var char זה היה רק אנגלית. var זה אומר שזאת מכרוזת משתנה, זה יכול להיות שהיא תתפוס לי שני תווים, או 20 תווים, או 100 תווים, כמה שהיא צריכה, לא מכרוזת שהיא תמיד באורך קבוע, וchar זה כמובן שהיא בנויה מcharacters, אז הוא יגדיר לי את זה בצורה כזאת.
זה סוג הנתונים האמיתי שיהיה ב-database מהדבר הזה. כמובן זה לא סטרינג, אז יש לנו פה טיפה שוני בשמות.
עבור כספים, הדאטאבייס צריך שיהיה לו money. איך אנחנו עושים את זה? אנחנו רואים לו column, וזה נתונים ששייכים לעמודה. בואו נפתח, נגיד לו type name, money. כמובן חייב להיות סוג כזה.
אז זה יהיה סוג הנתונים שיוגדר עבור ה-price. מה עוד אנחנו רוצים עבור ה-age group ID? בואו נניח שיש מתנה שהיא לא שייכת לגיל מסוים.
יכולה להיות לכל הגילאים. אולי במקרה כזה אנחנו כן רוצים להגיד, אוקיי, אתה לא חייב לתת לי Age Group ID. זאת אומרת, אנחנו כן רוצים להגדיר אותו כ-Allowed Null.
טוב, בואו נשים פה סימן שאלה, וכעת זה Allowed Null. דבר נוסף שכדאי לראות איך עושים. יכול להיות שאתם אומרים, רגע, אני רוצה בדאטאבייס ששם העמודה של המפתח תהיה Gift ID. זה משהו שהוא מאוד מאוד מומלץ עבור דאטאבייסים.
הנה לדוגמה, נקרה כזה, ב-H Groups אנחנו רוצים שבדאטאבייס העמודה תהיה H Group ID והמפתח הזר שלנו אנחנו רוצים אותו באותו השם H Group ID אז זה מאוד קל להסתכל ולראות שזה בעצם הדברים שמקושרים אחד לשני בדאטאבייס עצמו מה שאנחנו רואים פה זה כמובן ציור שהולך להיות בדאטאבייס אבל עבור אובייקט מסוג גיפט אולי אני רוצה
שהשם יהיה אחר לדוגמה שהוא יהיה ID כי אם יש לי אובייקט גיפט נניח אני הולך לאחר מכן ואני מייצר איזשהו אובייקט גיפט ואני לוחץ נקודה אז אין צורך לגשת לגיפט איי-די אני יכול להגיד לו תשמע אני כבר בגיפט אז תן לי רק איי-די אני יודע שזה האיי-די כי אני באובייקט והאובייקט הוא אובייקט גיפט אין פה שום צורך כל כך בשם
המלא בדאטאבייס אני כן רוצה פה לא מה עושים האטריביוט column שראינו מקודם כאן אנחנו אומרים לו תשמע אני נקרא איי-די לא מעניין אותך בדאטאבייס אתה הולך לייצר gift ID. זה ממש ממש נותן לו הוראה מה השם שאנחנו רוצים בדאטאבייס עצמו.
בואו נעשה את אותו הדבר גם ל-age group. בואו נראה.