
Northwind.edmx. השם הזה הוא גם שם הדאטאבייס. בוחרים Generate From Database, כי הדאטאבייס כבר קיים..\SQLEXPRESS לגרסת האקספרס המקומית. ל-Northwind אין שם משתמש וסיסמה, ולכן בוחרים Windows Authentication, בוחרים את הדאטאבייס Northwind ולוחצים Test Connection.Web.config. כך לא כותבים את החיבור בכל מקום בקוד, ואם השרת או הסיסמה ישתנו, משנים רק את הקובץ.Product. מסמנים גם Include Foreign Key Columns, כדי שקוד הקטגוריה יופיע ישירות במוצר. אפשרות ה-Stored Procedures לא נדרשת.NorthwindEntities ומחזירים ל-View את db.Products כרשימה. ה-View מוגדר כ-strongly typed לרשימה של Product, ו-using למרחב השמות מקצר את הכתיבה.id מהנתיב ומחפשת מוצר לפי ProductID בעזרת FirstOrDefault. אם לא נמצא מוצר, מוחזר null. הטיפול במקרה הזה נדחה לשיעור על שגיאות.SaveChanges() ומפנה ל-Index.UnitsOnOrder לא מוצג למשתמש. מוסיפים לפעולה [Bind(Exclude = "UnitsOnOrder")], כדי ש-MVC תתעלם ממנו גם אם מישהו זייף את הבקשה.הטקסט המלא של הדקות הראשונות בהרצאה «שימוש ב-Entity Framework - חלק 1» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אנחנו עוברים לגישה למסדי נתונים. כאן אנחנו הולכים לראות איך אנחנו יכולים באתר MVC להביא את המידע שקיים בתוך דאטאבייס, לבצע עליו מניפולציות, להוסיף מידע, לעדכן מידע ולמחוק מידע.
למה חשוב לנו לדעת את זה? במציאות חשוב שהמידע יישב בדאטאבייס בתוך מסד נתונים. כך ניתן לבצע עליו שאילתות בעזרת שפת SQL, ניתן להוסיף מידע, ניתן למחוק, ניתן לעדכן, להציג את המידע.
כמובן שמידע כזה יותר קשה לו ללכת לאיבוד מאשר אם הוא סתם שוכב בקובץ. אם השרת נופל לנו המידע לא נאבד. לכן חשוב לנו מאוד לדעת איך לגשת למסד נתונים ואיך לבצע מניפולציות על מידע שנמצא בתוך דאטאבייס.
אנחנו הולכים להשתמש בטכנולוגיה הכי חדשה שקיימת שנקראת Entity Framework. אז בואו נתחיל. דבר ראשון, אנחנו מתחילים מהמודל.
המודל במקרה הזה הולך להיות כל מחלקות המידע שמייצגות את המידע שיושב בתוך דאטאבייס. לכן אנחנו לא הולכים לבנות בעצמנו מחלקה שמתארת פרודקט במידה ויש לנו מוצרים בדאטאבייס אלא אנחנו משתמשים באנטיטי פריימורק בכדי שהיא תיצור לנו את המחלקה product שמתארת מוצר אחד שכמובן יושב בטבלה של מוצרים, טבלת
פרודקטס. אנחנו הולכים להשתמש עם מסד נתונים הדגמתי חינמי כזה של מייקרוסופט שנקרא Northwind. מסד הנתונים הזה, מסד נתונים מעולה בשביל לימוד והוא מתעסק ביבוא מוצרי מזון ייחודיים מכל העולם.
במסד נתונים כזה יש שמה מוצרים, יש לקוחות, יש ספקים, יש עובדים, יש קטגוריות של מוצרים ומאוד נוח ללמוד איתו ולהדגים איתו.
אז קודם כל אנחנו צריכים לבצע התחברות למסד הנתונים ובגלל שאנחנו צריכים את כל מחלקות המידע שייצגו לנו את המידע האמיתי שקיים בדאטאבייס אנחנו הולכים לעשות את זה כרגע מתוך מודל.
אז יש לנו פה את עתיקיית מודלס, אנחנו לוחצים עליה מקש ימני ומבצעים Add New Item ומה שאנחנו הולכים להוסיף זה בעצם אובייקט חדש של אנטיטי פריימורק אבל חשוב לבצע לפני זה את הנאגט שלמדנו בשביל לשלב את אנטיטי פריימורק במערכת אז בואו קודם כל נשלב את הנאגט, נלך לסלושן, נבצע Manage Nugget Packages for Solution,
נאתר אנטיטי פריימורק, אנחנו יכולים לבצע search או שאנחנו פשוט יכולים לראות אותו כאן במקרה והוא מופיע, Entity Framework, מבצע Install, I Accept, מתבצעת פה התקנה של Entity Framework ואנחנו עכשיו יכולים לבצע שילוב של הקובץ.
נבצע Add New Item, נלך ל-Data ונראה שיש לנו כאן ADO.NET Entity Data Model. זה בעצם קישור או מאפשר לנו להשתמש בכלי של Entity Framework, אבל למה זה נקרא ADO.NET?
הרי ידוע ש-ADO.NET זאת בעצם הטכנולוגיה הראשונה שיצאה ב-DOT.NET לגישה למסדי נתונים. זאת מפני שאנטיטי פריימרוורק מסתמכת על ADO.NET, כלומר זה מעין ראפר או מעטפת שמפשטת את העניינים, אבל מאחורי הקלעים היא משתמשת ב-ADO.NET, במקום שאנחנו נשתמש בטכנולוגיה שכבר נחשבת מיושנת.
אז אנחנו בוחרים את הקובץ ADO.NET אנטיטי דאטה מודל, ונותנים שם לקובץ, הקובץ הוא בעל סיומת EDMX, ונהוג ששם הקובץ הזה יהיה שם הדאטאבייס שאנחנו ניגשים אליו.
אנחנו עובדים עם דאטאבייס שנקרא Northwind, נקרא לזה Northwing. Northwing.edmx. נבצע Add. נבחר Generate From Database, מפני שקיים לנו כבר דאטאבייס מוכן, וכל מה שאנחנו רוצים לעשות זה לייצר את הכלים שיוכלו לתקשר עם הדאטאבייס הזה.
נבצע Next. כעת אנחנו צריכים להתחבר לדאטאבייס. בואו נבצע New Connection. נרשום את ה-Server Name, כלומר באיזה מחשב, או מקומי או בשרת, יושב בעצם הדאטאבייס עצמו.
הדאטאבייס יושב על מחשב מקומי אנחנו יכולים לרשום נקודה או סוגריים local זה אומר שהדאטאבייס יושב במחשב המקומי אם גרסת הדאטאבייס היא גרסת האקספרס כלומר גרסה חינמית אנחנו צריכים לרשום נקודה סלאש sql אקספרס או סוגריים local סלאש sql אקספרס אנחנו כרגע נרשום
נקודה סלאש sql אקספרס מפני שיש לנו פה את גרסת האקספרס גרסה חינמית לאחר מכן אנחנו בוחרים האם יש לנו Windows Authentication או SQL Server Authentication.
מה ההבדל? Windows Authentication לא מצריך מאיתנו להכניס יוזרניים ופאסוורד עבור כניסה לדאטאבייס אלא המערכת משתמשת בחשבון של Windows בשביל לגשת לדאטאבייס.
במידה והדאטאבייס מכיל יוזרניים ופאסוורד, כלומר הגדירו יוזרניים ופאסוורד עבור הדאטאבייס, אז אנחנו חייבים להשתמש ב-SQL Server Authentication ולספק את היוזרניים והפאסוורד.
עבור Northwind אין יוזרים ופספורט ולכן אנחנו בוחרים ב-Windows אנדדיקיישן. לאחר מכן אנחנו בוחרים את הדאטאבייס הרצוי, בואו נפתח, נראה פה רשימת דאטאבייסים שקיימים במחשב ואנחנו בוחרים את Northwind.
דבר הבא שחשוב לעשות זה ללחוץ על טסט קונקשן בכדי לראות שהכישור אכן הצליח וההגדרות נכונות. אנחנו רואים פה טסט קונקשן succeeded ומיד לאחר מכן נלחץ על אוקיי והמערכת מתחברת ישירות ל-Northwind.
כאן אנחנו רואים מכרוזת שמתארת את הקישור לתוך ה-Database. במכרוזת הזאת אנחנו יכולים לראות לדוגמה שה-Data Source, כלומר המחשב שאנחנו מתחברים אליו, השרת הוא שרת מקומי ובתוכו יושב SQL Express.
Initial Catalog זה השם של ה-Database, אנחנו רואים שזה Northwind. אינטגרייטד סקיוריטי שווה true מציין לנו שאנחנו נכנסים לדאטאבייס עם חשבון Windows ולא עם יוזמנם ופסוורד.
כאן חשוב שה-v הזה יהיה מסומן, save entity connection settings in webconfig. חשוב שהמחרוזת הזאת תישמר בתוך קובץ הקונפיגורציה שנקרא webconfig בכדי שהיא תוגדר פעם אחת ולא נצטרך להגדיר אותה כל פעם בקוד כשאנחנו רוצים לבצע גישה לדאטאבייס.
כמו כן, אם בעתיד המכרוזת הזאת משתנה אז אנחנו יכולים בקלות להיכנס ל-WebConfig שזה קובץ XML פשוט ולשנות את המכרוזת.
למה המכרוזת יכולה להשתנות? יכול להיות שאנחנו נעביר יום בהיר אחד את הדאטאבייס לשרת אחר ולכן הסרבר ישתנה. יכול להיות שאנחנו נוסיף Username ו-Password אז ה-Integrated Security תהפוך ל-False ואז אנחנו נצטרך להוסיף גם Username ו-Password.
זאת אומרת שמכרוזת SQL, ליתר דיוק מכרוזת ה-Connection String, נתונה לשינויים במהלך האפליקציה ולכן מאוד חשוב שהיא תשב בקובץ קונפיגורציה חיצוני לקוד שלנו.
בואו נלחץ על נקסט ואנחנו מגיעים לטופס שאומר לנו איזה דברים ברצוננו לבחור. אז קודם כל אנחנו נלך לטבלאות, נראה את כל הטבלאות שיש למסד הנתונים Northwind להציע לנו ונבחר פשוט את כולם.
נסמן פה, כל הטבלאות נכנסות והופכות להיות ישויות מבחינת הקוד שלנו. דבר הבא, יש לנו פה שלושה Vים. יש לנו כאן תווי הראשון שמציין האם לבצע רבים יחיד עבור האובייקטים שאנחנו יוצרים פלורליז זה רבים סינגולריז זה יחיד מה הכוונה בווי הזה בואו נסתכל רגע על אחת הטבלאות ונראה
שהטבלה נקראת פרודקטס וזה שם הגיוני מפני שטבלה תמיד אמורה להיקרא בשם ברבים עכשיו מה בעצם יש בטבלה הזאת בטבלה יש מוצרים ומוצרים בעצם זה רבים ולכן מוצרים יושבים בטבלה ברבים, אבל כל רשומה בטבלה מתארת לי מוצר אחד ויחיד.
לכן, אם אנחנו רוצים להביא את הטבלה של המוצרים, אז המערכת אמורה לבנות לנו ישות שמתארת מוצר אחד ויחיד. ישות זה קלאס, והשאלה היא איך נכון לקרוא לקלאס הזאת שמתארת מוצר אחד ויחיד.
אם אנחנו לא נסמן את ה-v הזה, אז הישות שמתארת מוצר אחד ויחיד תיקרא product כמו שם הטבלה, וזה בעצם שם לא נכון, עבור מוצר בודד.
אם אנחנו מסמנים את השם, Entity Framework תבין ש-Products זה רבים בגלל ה-S, ולכן תייצר לנו קלאס שמתארת מוצר אחד שנקרא Product ביחיד.
הדבר הבא זה Include Foreign Key Columns in the Model. מה זה אומר? אם בעצם יש לנו טבלה שנקראת Categories ולטבלת Categories יש קוד קטגוריה, למוצר יש קטגוריה, בטבלת פרודקט אמורה להיות עמודה שמתארת את קוד הקטגוריה וה-v הזה אומר שאנחנו רוצים שהעמודה הזאת
שמתארת את קוד הקטגוריה תופיע גם בטבלת פרודקט ובדרך כלל אנחנו נרצה לבצע את זה כי זה הרבה יותר מהיר בקוד אם אנחנו רוצים מתוך מוצר לראות מה קוד הקטגוריה שלו.
אם לא היינו מסמנים את זה אז בטבלת פרודקט לא היה את קוד הקטגוריה. איך בדיוק היינו יכולים להגיע לקוד קטגוריה? בישות שמתארת פרודקט היה עוד אובייקט שמתאר קטגוריה, ולכן דרך האובייקט שמתאר את הקטגוריה היינו יכולים להגיע לקוד הקטגוריה.
הדבר הזה קיים גם אם נסמן את ה-V וגם אם לא נסמן את ה-V, אבל אם נסמן את ה-V הזה, בנוסף לאובייקט שמתאר את הקטגוריה, מופיע גם קוד הקטגוריה בטבלת פרודקטס, וזה קצת יותר נוח להשתמש עם זה בקוד.
ה-V השלישי, Import Selected Stored Procedures and Functions into the Entity Model, נציין גם שאנחנו רוצים לייבא את ה-Stored Procedures וה-Functions.
אם אין לנו כרגע Stored Procedures ו-Functions אנחנו פשוט יכולים לבטל את זה, אנחנו כרגע לא מתעסקים עם Stored Procedures ו-Functions אז אנחנו נוריד את ה-V הזה.
מודל Namespace מתאר לנו מה מרחב השמות שאנחנו רוצים שכל האישויות שהולכות להיווצר אוטומטית נמצאים בתוכו.
נשאיר את זה Northwind מודל ונלחץ Finish. כעת, אינטיטי פריימרוק הולכת להביא לנו את כל הטבלאות ויוצרת לנו דיאגרמה שהדיאגרמה מראה איזה מחלקה נוצרה מכל טבלה.
בואו נסתכל ונראה שיש פה ממש את כל הטבלאות עם הכישורים ביניהם. אנחנו רואים פה שיש מחלקה שמתארת עובד אחד, כל הדאטה ממברס של המחלקה האלה זה השדות של הטבלה אנדלואי, יש לנו כאן מחלקה שמתארת מוצר אחד, מה שאנחנו רואים זה השדות שמתארות את הפרופרטיז של מוצר ולמטה אנחנו רואים את האובייקטים שמקושרים זאת אומרת שאם
product מקושר לקטגוריה אז אנחנו רואים שנוצר לנו אובייקט זה נקרא navigation object שבעצם דרכו אנחנו יכולים להגיע לאובייקט של הקטגוריה ששייכת למוצר ספציפי כנ"ל פירוט הזמנה כנ"ל הספק של המוצר זה דברים שמאוד נוח להשתמש איתם בקוד אנחנו רואים שיש לנו כאן את כל הרכיבים בואו נבצע סייב ואת זה אנחנו יכולים לסגור כרגע
הבאנו לתוך האפליקציה שלנו את כל מה שצריך בשביל להתחיל לעבוד עם אנטיטי פריימורק אם אנחנו מסתכלים בתוך המודל אנחנו רואים שיש לנו את קובץ ה-idmx הקובץ הזה מחזיק בתוכו את כל התרשים דיאגרמה שראינו כאן אנחנו יכולים לראות שיש לנו את כל האובייקטים הנוספים שנוצרו כאן אנחנו יכולים לראות שיש לנו את המחלקות.
אם אנחנו מסתכלים על פרודקט, אנחנו יכולים לראות שזה בעצם קלאס שנוצרה אוטומטית, במקום שאנחנו ניצור אותה בקוד כמו שיצרנו בסרטונים הקודמים, ואוטומטית לקלאס הזאת יש את כל המאפיינים הדרושים בשביל לטפל במוצר אחד ולהכניס או לקבל מוצר ממסד הנתונים.
אז כל המידע הזה נבנה אוטומטית, זהו קוד סינתטי, נחשב קוד סינתטי, אנחנו רואים פה auto generated, נהוג לגעת בקוד הזה, מפני שאם נעשה איזשהו שינוי, לדוגמה שינוי בדאטאבייס ונגרור מחדש את הטבלה, אז כל הקוד שרשמנו כאן ייעלם ואנטיטי פריימום
תיצור אותו מחדש. לכן לא נוגעים במחלקות האלה. אז בואו נחזור, נסגור פה את הכל ונוכל להתחיל לעבוד. אז אנחנו הולכים להתעסק עם טבלת המוצרים, ומה שאנחנו הולכים לעשות עם טבלת המוצרים זה לצפות בכל המוצרים, לאפשר לצפות במוצר אחד, להוסיף מוצר, ולמחוק מוצר.
לכן אנחנו הולכים להוסיף קונטרולר שנקרא "products.controller", נבצע add ויש לנו כאן פונקציית אינדקס שבה אנחנו רוצים לגשת ולהביא את כל המוצרים. לכן בואו ניצור איזשהו אובייקט שיאפשר לנו לגשת לדאטאבייס דרך האנטיטי פריימרוק ולהביא את כל המוצרים.
אז האובייקט שאנחנו צריכים ליצור בכדי לגשת לתוך הדאטאבייס ולהביא את המוצרים נקרא Northwind Entities זה בעצם שם מסד הנתונים שהגדרנו כולל אפיומת Entities אנחנו רואים שהוא נמצא בתוך Entity Framework Models ניצור אובייקט ממנו ומה שיש באובייקט הזה זה בעצם סכמות של קולקשנים שמתארים את המידע שנמצא
בתוך הדאטאבייס לדוגמה אנחנו רואים שיש לנו קולקשן שנקרא Products שם של הקולקשן הוא תמיד השם של הטבלה המקורית מפני שהטבלה מתארת לנו שם ברבים, כי יש בה פריטים רבים ולכן הקולקשן הגיוני שהוא יהיה באותו השם והוא מתאר לנו פריטים רבים פריט אחד בקולקשן אמור לתאר לנו מוצר בודד
ולכן זה יהיה אובייקט מהמחלקה פרודקט שראינו מקודם עכשיו, חשוב להבין שלמרות שזה קולקשן ואנחנו יכולים להוסיף לדוגמה או למחוק אין בקולקשן הזה שום מידע כי לא היה הגיוני שאנטיטי פריימרו תיכנס לדאטאבייס ותיקח את כל המידע בדאטאבייס שהוא יכול להיות מידע עצום ותשים לנו אותו בקוד.
הדבר הזה היה מאט מאוד את המערכת ומבזבז המון המון זיכרון. ולכן השמות של הקולקשנים האלה זה רק סכמות של המידע שקיים בדאטאבייס.
אם אנחנו נביא את המידע בעצמנו, אז יהיה לנו את המידע. אנחנו נעשה שינוי מסוים בקולקשן ואז ניתן הוראה לשמור אותו, הרגע פריימוורק תלך ותשמור את הדברים הרצויים בדאטאבייס אבל היא לא משכפלת בצורה מיידית את המידע לתוך
הקולקשנים האלה. אוקיי, אז כל מה שאנחנו צריכים לעשות זה לגשת לאוסף הפרודקט ולדוגמה להפוך אותו לליסט. אנחנו רואים שמוחזר לנו אובייקט ליסט של פרודקט כי אנחנו רוצים לראות את כל המוצרים.