PracticU

הרצת שאילתת SQL Select
ב-Entity Framework Core

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

הרצת שאילתת SQL Select ב-Entity Framework Core
שאילתת select גולמית ב-Entity Framework Core רצה אחרת משאילתות שמשנות נתונים, ויש לה מגבלה חשובה: התוצאה חייבת להתאים לאובייקט של ה-ORM.
איך מריצים select
1. כתיבת השאילתה: בפונקציה שמציגה מתנות לפי טווח מחירים, כותבים select * from gifts where price >= 20 and price <= 40 order by price.
2. הרצה על הטבלה: הפעם פונים ל-db.gifts.FromSqlRaw (ולא ל-db.database). הפונקציה מחזירה query, תיאור של שאילתה שעדיין לא הורצה.
3. המרה לרשימה: קוראים ל-query.ToList() ומקבלים רשימת Gift, ואז מציגים את התוצאות.
4. בדיקה: בטווח 20 עד 40 מוחזרת רק Jack in a Box (20.5), ובטווח 10 עד 40 נוספת גם cute doll.
מגבלות
- אם שאילתת ה-select לא מחזירה את כל העמודות שהאובייקט צריך, התוכנה קורסת. אחרי בחירה של name ו-price בלבד הופיעה השגיאה שהעמודה gift ID חסרה, ואחרי הוספתה הייתה שגיאה שהעמודה age group ID חסרה.
- הוספת עמודה מחושבת, כמו price * 1.17 as vat price, תקינה ב-SQL אבל אין לה מקום באובייקט Gift, ולכן אין בה תועלת.
- בדרך כלל לא מריצים שאילתות כאלה. מביאים בדיוק את המידע הנדרש או עובדים עם ה-ORM ללא שאילתות גולמיות. מקרים מורכבים יותר, כמו stored procedure שמחזירה מידע שאינו באובייקט, יוצגו בהמשך.
אחרי ההרצאה אפשר להריץ select גולמי ולהבין למה הוא דורש התאמה מלאה לאובייקט, וכך הושלמו פעולות CRUD ב-Entity Framework: הבאת מידע, הוספה, עדכון ומחיקה.
השיעור הבא בקורס: יירוט שאילתות Intercepting Queries

פרקי ההרצאה: הרצת שאילתת SQL Select ב-Entity Framework Core

  1. 00:00

    הצגת מתנות לפי טווח מחיר

  2. 00:41

    כתיבת שאילתת SELECT עם WHERE

  3. 01:23

    הפיכת ה-query לרשימת gifts

  4. 02:17

    שינוי טווח המחיר לתוצאות נוספות

  5. 02:53

    קריסה בבחירת עמודות חלקיות

תמלול ההרצאה: הרצת שאילתת SQL Select ב-Entity Framework Core

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

  1. 00:02

    להרצת שאילתת Select על ידי שאילתת rawsql בואו נעתיק את הפונקציה האחרונה ובואו נניח שאנחנו רוצים to display gifts by price range בואו נדיר displaying gifts by price range מינימום נניח 20 מקסימום נניח 40 אנחנו רוצים לראות את התוצאה.

  2. 00:31

    ניקח את הפונקציה, נשים פה, הנה הקונטקסט שלנו, מה אמורה להיות השאילתא? שאילתת ה-SQL אמורה להיות, בואו ניפטר רגע מכל זה, Select all from gifts where price גדול שווה ל-20 and price קטן שווה מ-40, ובואו אפילו נמיין את זה,

  3. 00:56

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

  4. 01:09

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

  5. 01:32

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

  6. 01:51

    ובואו נראה רגע, אנחנו רוצים לבחור בין 20 ל-40. מה יש לנו? יש לנו 20.5 בלבד, אוקיי, זה לא כזה בין 20 ל-40, ייתן לנו רק 20.5, טוב, בואו ננסה להריץ מה כבר יקרה.

  7. 02:11

    נריץ רגע, והוא אומר לנו שרק Jack in the Box זה בין 20 ל-40, בסדר, בואו נגיד לו, תשמע, אני רוצה לראות בין 10 ל-40, אז אנחנו נראה גם את ה-cute doll הזה, 10 עד 40 בואו נריץ ויש לנו גם את ה-Qtol.

  8. 02:31

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

  9. 02:51

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

  10. 03:00

    תביא לי רק name ותביא לי price בלבד. תביא לי גם את ה-ID שלא יהיה בעיה, זה נקרא gift ID מהדאטאבייס. ותקרא לו האמת בשם ID, כי אצלנו זה ID. בואו נריץ, ואנחנו בעצם אמורים לקבל קריסה, והוא אומר לנו, the required column gift ID was not present in the results of from SQL. בואו נוריד את זה, אולי הוא בעצם חייב

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

ההרצאה הקודמת: הרצת שאילתת SQL לעדכון הנתונים - ב-Entity Framework Core

ההרצאה הבאה: יירוט שאילתות - Intercepting Queries

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

  • שימוש ב-Entity Framework - חלק 1
  • הרצת טסט - Robot Framework
  • פקודת Select
  • הסבר על Console - דוט-נט Framework vs Core

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

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