משך: 2.5 שעות אקדמיות (113 דקות).

מטרת השיעור: הסטודנטים יחוו בפועל את הערך של תבנית ה-DAL — מעבר InMemory→SQL בשינוי מבודד, שיטה-שיטה.

בסוף השיעור הסטודנטים צריכים: לכתוב SqlRepository שמממש IRepository קיים מתודה-אחר-מתודה, להחליף רישום DI, להעביר Connection String ל-appsettings.json, ולהסביר למה Service/Controller לא נוגעים.

דגש קריטי: זהו “רגע השיא” של כל תבנית ה-DAL שנלמדה ביחידה הקודמת — הדגישו את זה מפורשות, לא רק “עוד שיעור”. בנו את ה-Repository מתודה-מתודה, לא כקובץ מוכן אחד — זה מה שהופך את ה-Change Tracking (ל-Update/Delete) לברור, לא רק “עוד שורת קוד”.


מהלך השיעור

חלק בשיעורמשךהערות ודגשים
פתיחה וחיבור5 דקותחזרה: IRepository + InMemoryStudentRepository מהיחידה הקודמת
בונים SqlRepository מתודה-מתודה30 דקותGetAll→GetById→Add→Update→Delete בנפרד; Update/Delete = Change Tracking (מושג חדש)
Connection String → appsettings.json15 דקותקשרו לשיעור הראשון ביחידה הקודמת שכבר הזכיר appsettings.json
הדגמה חיה: החלפת DI20 דקותשורה אחת ב-Program.cs, בלי לגעת בשאר
ה-Controller חוזר להיות דק15 דקותהשוו מול הגרסה “המקוצרת” מהשיעור הקודם שדיברה ישר עם DbContext
בדיקת עמידות13 דקותrestart אפליקציה, נתונים עדיין קיימים; אותם 2 endpoints כמו בשיעור הקודם
תרגול מודרך15 דקותתרגיל 1+2

דגשים להעברת השיעור

  • זהו רגע ה"וואו" של כל היחידה — ודאו שסטודנטים באמת רואים בפועל ששינוי שורה אחת ב-Program.cs הוא כל מה שנדרש. אל תדלגו על ההדגמה החיה הזו לטובת תיאור.
  • הדגישו שהבדיקה “restart אפליקציה, נתונים עדיין שם” היא ההוכחה האמיתית להבדל בין InMemory ל-SQL — לא רק תיאורטית, אלא ניתנת-לבדיקה בפועל.
  • SaveChanges בכל מתודה (לא רק Add) הוא מלכודת נפוצה — הדגימו Delete בלי SaveChanges שנכשל “בשקט”.

מושגים

SqlRepository — מימוש IRepository<T> עם EF Core. Change Tracking — איך DbContext יודע אם לייצר INSERT/UPDATE/DELETE כש-SaveChanges נקרא. appsettings.json — קובץ הגדרות הפרויקט; כאן נטען ממנו Connection String בפועל לראשונה. Connection String — הגדרת חיבור ל-DB, מ-Configuration (לא מקושח בקוד).


תרגיל חשיבה

שאלת פתיחה: “לפני שהתחלתם את היחידה הזו, האם חשבתם שמעבר ממאגר-נתונים-בזיכרון למסד-נתונים-אמיתי ידרוש לשכתב את כל ה-Controller וה-Service? מה השתנה בהבנה שלכם?”

מהלך: תנו לסטודנטים לחשוב אחורה על מה שהיו מצפים “לפני” מול מה שקרה בפועל “אחרי”. זו הזדמנות מצוינת לגבש בקול רם את הלקח המרכזי של כל שתי היחידות (ASP.NET Core + SQL/EF Core) יחד: תכנון נכון מראש (DIP, IRepository) הופך שינויים גדולים-לכאורה לשינויים קטנים בפועל.

מה המרצה מראה בסוף: הראו side-by-side את InMemoryStudentRepository ו-SqlStudentRepository — שני קבצים נפרדים לגמרי, אותו Interface בדיוק. הריצו את אותה קריאת API (GET api/students) פעם מול כל מימוש (על ידי שינוי הרישום ב-Program.cs והרצה מחדש) — התוצאה זהה מבחוץ, ההבדל רק “מאחורי הקלעים”.