PracticU

LINQ ל- Entities

בלי כתוביותעם כתוביות
PracticU › קורס ADO.NET - חיבור אתר למסד נתונים › LINQ ל- Entities
מילון מושגים:
LINQ - יכולת ב-.NET לכתוב שאילתות על אוספים ומקורות נתונים ישירות בתוך קוד C# בתחביר אחיד.
ADO.NET - אוסף מחלקות ב-.NET לגישה למסדי נתונים, להרצת שאילתות ולעבודה עם התוצאות.
מודל - רכיב שמייצג את הנתונים ואת הלוגיקה העסקית באפליקציה. גם ייצוג מופשט של מערכת או תהליך.
שאילתה - בקשה למסד נתונים לשלוף, להוסיף, לעדכן או למחוק נתונים, לרוב בשפת SQL.
מסד נתונים - אוסף מאורגן של נתונים המאוחסן כך שאפשר לשמור, לחפש, לעדכן ולשלוף אותו ביעילות, לרוב באמצעות שפת שאילתות.
טבלה - מבנה במסד נתונים שמאחסן נתונים בשורות ועמודות. כל שורה היא רשומה וכל עמודה היא שדה.
עמודה - שדה בטבלת מסד נתונים שמחזיק ערך מסוג מסוים עבור כל שורה, למשל שם או תאריך.
SQL Server - מערכת ניהול מסדי נתונים יחסיים של מיקרוסופט, הנשלטת בשפת T-SQL.

LINQ ל- Entities
הרצאה זו מציגה LINQ to Entities, שמבוסס על ADO.NET Entity Data Model. המודל נוצר מהמסד, וממנו כותבים שאילתות LINQ על הישויות, כולל הוספה, עדכון, מחיקה וסינון.
השלבים העיקריים
1. יצירת המודל: מוסיפים ADO.NET Entity Data Model לאתר, בוחרים Generate from database, ומסמנים את הטבלאות הנדרשות. המודל נשמר בתיקיית App_Code וחיבור המסד נשמר ב-Web.config.
2. שינוי שמות: בתוך המודל אפשר לשנות שמות של עמודות, לדוגמה LastName לשם Surname, ולבנות את המודל לפי הצורך.
3. הוספה: יוצרים אובייקט Employee חדש, ממלאים את השדות, מוסיפים אותו לאוסף העובדים, וקוראים ל-SaveChanges.
4. עדכון: מביאים את העובד לפי המזהה בעזרת FirstOrDefault, מעדכנים את השדות ושומרים.
5. מחיקה וסינון: מחיקה מתבצעת עם DeleteObject ו-SaveChanges. סינון לפי עיר מחזיר את העובדים שגרים בעיר מסוימת, ואפשר לבחור רק חלק מהשדות לתצוגה.
שימו לב
המרצה הדגיש שההבדל בין Single ל-FirstOrDefault הוא שכשאין תוצאה, FirstOrDefault מחזירה null ולא מפילה את התוכנית. הישויות ניתנות לחיבור גם למסדי נתונים אחרים שתומכים בכך, ולא רק ל-SQL Server.

פרקי ההרצאה: LINQ ל- Entities

  1. 00:00

    הכרת LINQ to Entities

  2. 00:36

    הוספת Entity Data Model

  3. 01:51

    חיבור וייצור מהמסד

  4. 03:25

    אפשרות Pluralize

  5. 05:34

    עריכת המודל

  6. 07:56

    אובייקט NorthwindEntities

  7. 11:46

    עדכון עובד

  8. 12:40

    שאילתה עם FirstOrDefault

תמלול ההרצאה: LINQ ל- Entities

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

  1. 00:01

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

  2. 00:26

    וכמובן בהתאם או בדומה ללינק טו sql אני יכול לבצע insert, update, delete, ואני יכול להפעיל גם סדרות פרסיג'רס.

  3. 00:34

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

  4. 00:48

    אנחנו הולכים ל-Add New Item, ואנחנו צריכים לבחור Link to Entities. הקובץ הזה נקרא, איפה הוא נמצא כאן? הנה הוא כאן, ADO Entities Data Model.

  5. 01:09

    בואו ניתן שם לקובץ, נקרא לו Northwind Entities. מודל ונבצע add. עכשיו המערכת אומרת לי שאני בעצם הולך להכניס קובץ שהולך להכיל מחלקה ואנחנו צריכים שהמחלקות שאנחנו מוסיפים לאתר האינטרנט שהן לא שייכות לדפים יהיו בתוך app code.

  6. 01:40

    app code זה תיקייה מיוחדת של sql של sp.net ליתר דיוק שמכילה מחלקות שהן לא דפים. כמובן נגיד לו yes תבנה לנו את המחלקה את התיקייה הזאת של אפי פי קוד ואנחנו רואים אותה כאן בצד שבתוכה הולך להיות הקובץ.

  7. 02:00

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

  8. 02:09

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

  9. 02:28

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

  10. 02:46

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

  11. 03:04

    אוקיי, אז בואו נביא טבלת employees, נביא טבלת products, נביא נביא טבלת categories ונביא טבלת בואו ניקח גם את orders, order details ו-suppliers, כל הטבלאות המקובלות וגם customers, טבלאות הנפוצות.

  12. 03:30

    עכשיו יש פה צ'קבוקס מאוד חשוב ששואל אותנו דבר כזה. pluralize or singularize generated object names. מה זה אומר הצ'קבוקס הזה?

  13. 03:42

    אנחנו ראינו שבלינק to sql אוטומטית הוא ראה ששם טבלה זה ברבים לדוגמה הוא ראה את השם product ויצר ממנה מחלקה שנקראת product כלומר הוא הפך את השמות של רבים לשמות של יחיד וזה בדיוק מה שהוא שואל אותי כאן.

  14. 04:00

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

  15. 04:19

    כלומר, אם המחלקה שלי, אם הטבלה שלי היא products, אני רוצה שהמחלקה שהוא ייצר יהיה product אחד ויחיד. אוקיי, יש לנו את Northwind מודל כאן בתור ה-namespace שהוא הולך לייצר, ואנחנו לוחצים על finish.

  16. 04:36

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

  17. 04:59

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

  18. 05:12

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

  19. 05:22

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

  20. 05:38

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

  21. 05:55

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

  22. 06:13

    אז בואו ניגש לדפים שלנו ויש לנו כבר לחצן שמאפשר להוסיף עובד חדש. ב-Linked to SQL היה לנו אובייקט שמקשר בין האפליקציה שלנו לבין מסד הנתונים והוא היה נקרא Northwind Data Context.

  23. 06:31

    באנטיטי פריימורק המודל הזה, או האובייקט הזה, נקרא Northwing Entities. אז בואו נגדיר כאן את האובייקט הזה, נקרא לו db-cישור-לדאטאבייס וניצור אובייקט חדש ממנו.

  24. 06:53

    בדומה ללינק טו sql אנחנו יכולים ליצור אובייקט חדש מהמחלקה שאנחנו רוצים להוסיף. אנחנו רוצים עכשיו להוסיף עובד חדש, אז בואו ניצור אובייקט מהמחלקה employees. האובייקט כמובן נקרא Employee.

  25. 07:10

    EMP שווה New Employee ולהתחיל להכניס לו ערכים. tmp.firstName שווה txt.firstName.text tmp.kאן יהיה לנו כבר surname כי אנחנו שינינו את זה במודל שווה txt.lastName.text עכשיו אנחנו רוצים להוסיף את האובייקט הזה לתוך מסד הנתונים אז יש לנו פה את db.

  26. 07:41

    ויש לנו add to employees כאן אנחנו רואים שהפונקציות הן טיפה שונות מהפונקציות שהתבצעו ב-linked to sql אז add to employees אני מוסיף את ה-EMP ו-db.savechanges בואו נבדוק נדליק ראשית את מסד הנתונים נאתר את טבלת אמפלואיז יש לנו פה את ה-databases

  27. 08:15

    יש לנו פה את northwind tables employees ונראה כרגע שיש לי פה תשעה עובדים אז בואו נריץ את האתר ונוסיף עובד חדש נקרא לו מוישה רופניק add employee הדף סיים לעבוד נסגור אותו נחזור למסד הנתונים ונרפרש את המידע וכעת אנחנו רואים שיש לנו עובד מספר 10 שהתווסף שנקרא מוישה אופניק שם פרטי מוישה שם משפחה אופניק

  28. 09:00

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

  29. 09:29

    אז בואו נבנה ראשית את ה-Northern Data Context או יותר נכון ה-Northern Entities באזור הגלובלי כך שכל הלחצנים יוכלו להגיע אליו.

  30. 09:41

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

  31. 10:07

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

  32. 10:18

    אז בואו נראה איך עושים את זה. ראשית בואו ניקח איזשהו אינטג'ר EMPID convert to IN32, ניקח את TXT Employee ID טקסט. יש לנו עכשיו את ה-ID שעלינו לאתר.

  33. 10:32

    עכשיו בדומה ללינק טו sql אנחנו כותבים שאילתה var query from emp in db employees where emp.employeeid שווה ל-emp.id שכרגע השגנו ואני בוחר את כל אמפלואי.

  34. 10:51

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

  35. 11:12

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

  36. 11:25

    וכל מה שאנחנו צריכים לעשות זה לבדוק האם EMP2-update שונה מנהל. אם כן, בואו נעדכן אותו:

  37. 11:35

    EMP2-update.firstname=txt.firstname.text emp2update.surname שווה txt lastname.text ואז db.savechanges בואו נבדוק כעת את ההרצה של האתר. נכניס ב-first name kipi, נכניס ב-last name בן-קיפוד, אנחנו מעוניינים שזה יהיה עבור אמפלואי מספר 10 ונלחץ על לחצן Update Employee.

  38. 12:16

    הדף סיים לעבוד, בואו נחזור בחזרה, אנחנו עדיין רואים שזה מוישה הופניק, נרפרש את המידע, וקיבלנו על אמפלואי מספר 10 את kipi בתור first name בן קיפוד בתור last name.

  39. 12:34

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

  40. 12:48

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

  41. 13:01

    איך זה מתבצע? אז יש לנו כאן את ה-query שמקודם עשינו, יש לנו כאן את ה-first or default, ש-first or default החזירה מה-query אובייקט אמפלואי שנמצא ב-query.

  42. 13:16

    אנחנו עכשיו יכולים לעשות משהו קצת יותר פשוט. בואו ניקח את השורה הזאת, נשכפל אותה לכאן ונשנה את ה-EMP to Update ל-EMP to Delete.

  43. 13:29

    First or default מסוגלת לקבל גם למדה אקספרשן, אין לנו אבל query ולכן אנחנו נגיע ישירות לתוך db.employees.first or default. עכשיו אנחנו מסוגלים לתת שאילתה או יותר נכון lambda expression שמקבלת employee ומחזירה בוליאן והפונקציה שבעצם אנחנו שולחים מאתרת את אותו עובד שאנחנו מעוניינים למחוק.

  44. 14:05

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

  45. 14:25

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

  46. 14:47

    אז בואו נפתח כאן שוב את אותה פקודה כאן, int EMPID לקחתי את ה-employee ID ועכשיו

לקורס המלא: קורס ADO.NET אונליין

ההרצאה הקודמת: LINQ ל- Dataset

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

  • LINQ
  • שאילתת LINQ - על אוספים רגילים

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

  • קורס WinForms - תוכנות רגילות בווינדוס
  • פרויקט מעשי ב-#C - בונים מחשבון פשוט
  • פרויקט מעשי ב-#C - ספר טלפונים
  • פרויקט מעשי ב-#C - תוכנת צייר
  • קורס תכנות מתקדם - #Advanced .NET C
  • קורס WCF - תקשורת למתקדמים בדוט-נט