הגדרת הפרויקט

זהו הפרויקט המסכם של יחידת SQL ו-EF Core כולה: לוקחים את ה-Task Manager API מהפרויקט המסכם של יחידת ASP.NET Core, ומחליפים את שכבת הנתונים שלו ל-DB אמיתי מקצה לקצה — סכמה מנורמלת עם קשר בין ישויות (עיצוב DB), EF Core Code First עם Migrations, SqlTaskRepository אמיתי, שאילתות עם Include שנמנעות מ-N+1, ודוח אנליטי אחד עם Window Function. אין כאן כלי טכני חדש — המשימה היא לחבר את חמשת השיעורים ליחידה שלמה ועובדת, בלי לגעת ב-Controller הקיים בכלל (הוכחה מעשית לערך של הפרדת שכבות).

מה צריך להיות מוכן בסוף

דרישות:

  1. סכמה מלאה: Category↔TaskItem עם קשר many-to-one (foreign key), ו-Migration ראשונה שיוצרת את שתי הטבלאות
  2. SqlTaskRepository מלא שמממש את ה-IRepository<T> הקיים, עם Include על הקטגוריה בכל שליפת רשימה
  3. Endpoint אנליטי נוסף (GET api/tasks/report) שמחזיר משימות פתוחות מדורגות לפי עדיפות בתוך כל קטגוריה, באמצעות Window Function (ROW_NUMBER() OVER (PARTITION BY ...))
  4. ה-TasksController הקיים נשאר ללא שינוי — כל העבודה קורית בשכבת ה-Repository ומטה

קריטריוני הצלחה:

• כל ה-CRUD הקיים ממשיך לעבוד בדיוק כמו קודם, בלי לגעת ב-Controller

• ה-endpoint האנליטי מחזיר דירוג נכון בתוך כל קטגוריה בנפרד (לא דירוג גלובלי אחד)

• אין שאילתות N+1 בשום מקום בקוד — כל שליפה שצריכה את הקטגוריה משתמשת ב-Include

• ה-Migration החדשה מוחלת בהצלחה על מסד נתונים ריק ויוצרת את שתי הטבלאות עם הקשר ביניהן

דוקומנטציה רשמית מותרת

Microsoft Learn — EF Core overview

Microsoft Learn — Window functions

Microsoft Learn — Include (loading related data)