# פרויקט מסכם — EF Core📖 שיעור

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

זהו הפרויקט המסכם של יחידת 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](https://learn.microsoft.com/ef/core/)

[Microsoft Learn — Window functions](https://learn.microsoft.com/sql/t-sql/queries/select-over-clause-transact-sql)

[Microsoft Learn — Include (loading related data)](https://learn.microsoft.com/ef/core/querying/related-data/eager)
