
GetTypedInventoryItems מקבלת @TypeID (int). היא מחזירה InventoryItemID, שם המותג בשם BrandName ואת Quantity, מ-InventoryItems ב-INNER JOIN ל-Brands לפי BrandID, עם WHERE שבו TypeID שווה לפרמטר. אין לה מודל ולא View מתאים.BrandedInventoryItem עם InventoryItemID (int), BrandName (string, שמסומן כלא-null) ו-Quantity (nullable int). מסמנים אותה כ-Keyless. הדובר מעתיק את ההגדרות ממודלי Brand ו-InventoryItem.DbSet של ה-DTO בשם הפרוצדורה עם הסיומת Results: GetTypedInventoryItemsResults. את הקוד כותבים ב-partial class של ה-Context בתיקיית Extensions, כדי שלא יידרס. אם ה-DTO הוא internal וה-Context public, מתקבלת שגיאת accessibility, ולכן מגדירים את ה-DTO כ-public.GetTypedInventoryItems(int typeId) מחזירה רשימת DTO: פנייה לקולקשן, FromSql עם שם הפרוצדורה והפרמטר, ו-ToList.Branded מתאר את התוצאה, והבחירה לפי Typed מתאימה לפרמטר.Database.ExecuteSql.FromSql. אם לא, בונים DTO.if (!optionsBuilder.IsConfigured) עם UseSqlServer וה-connection string מ-AppConfig. בפרויקט web, לפי הדובר, יש פקודה שעושה את זה מראש.הטקסט המלא של הדקות הראשונות בהרצאה «יצירה ושימוש ב-Stored Procedure שלא מתאימות למחלקת Model» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
הסטורט פרוסיג'ר הזו שבנינו נחשבת מודל מפינג סטורט פרוסיג'ר כי היא מביאה את כל העמודות שיש למודל מסוים במודל קאסטומר ולכן יכלנו להשתמש איתה דרך הקולקשן קאסטומרז אנחנו רוצים לראות איך אנחנו כאן בדאטאבייס פרסט מתעסקים עם סטורט פרוסיג'ר שהיא לא מתאימה למודל מה שדיברנו קוארי מפינג סטורט פרוסיג'ר לפעמים קוראים לה או
dto מפינג סטורט פרוסיג'ר אנחנו נצטרך כאילו לבנות data transfer object מיוחד עבורה. אז בואו נראה איך אפשר לעשות את זה. בואו נבנה create or alter procedure, ואנחנו רוצים להביא typed inventory.
עזבנו את ה-customer, עברנו ל-inventory. typed inventory items זה אומר פריטים כתלות בטייפ מסוים. נניח אנחנו רוצים לראות את כל החולצות, לא משנה לנו מאיזה ברנד החולצה.
אז אנחנו רוצים לקבל שטרודל טייפ איי-די וזה יהיה אינט מה יש לנו בתוך האינבנטורי בואו נראה רגע באינבנטורי אייטמס אם אני אעשה רגע דיזיין אז יש לנו את האינבנטורי אייטם איי-די בואו ניקח אותו ויש לנו את הברנד איי-די אז בואו נגדיר זה יהיה brands.name as brand name בואו נביא quantity from inventory items inner join
brands on אנחנו רוצים ש-Inventory Items Brand ID יהיה שווה ל-Brands Brand ID. וה-Ware שלנו זה שה-Inventory Items.Type ID שווה ל-Stודל Type ID. אז הנה יש לנו סטורט פרוסיג'ר שמחזירה מידע שהוא לא מתאים לאף מודל שקיים עדיין, הוא לא מתאים ל-Views,
אין לנו dto עבורו כרגע אנחנו רוצים לראות איך משתמשים איתו. בואו נבצע execute אנחנו רואים command completed successfully בואו נרפרש והנה יש לנו get typed inventory items מעולה ואנחנו חוזרים בחזרה מה אנחנו צריכים לעשות כאן בשביל להשתמש עם ה-store procedure.
scaffolding אין לנו מה לעשות אנחנו לא מקבלים שום דבר מ-store procedures אבל אנחנו כן רוצים לבנות עבורה DTO. איך עושים את זה?
אנחנו רוצים שיהיה לנו כל מיני DTO's, אז אנחנו יכולים לגשת לכאן ולייצר תיקייה DTO's, או פשוט לשים את ה-DTO's בתוך ה-Extensions, בתוך ההרחבות.
זה גם בסדר. בואו נרשום כרגע את התיקייה DTO's כאן, ובתוכה אנחנו רוצים לבנות איזושהי מחלקה שמתארת בדיוק את המידע שמוחזר מה-StoredProcedure מוחזר לנו BrandedInventoryItem כי אנחנו מביאים לפי טייפ ומה שמוחזר זה ה-InventoryItem שמכיל Brand האמת שכחתי לסיים אותו ב-DTO כן תשנה לי יופי אז הנה יש לנו פה את הקלאס
בואו נסתכל שוב פעם מה ה-StoredProcedure מחזירה אז היא מחזירה אינבנטורי אייטם איידי אז אנחנו שמים פה פרופ אינט אינבנטורי אייטם איידי הדבר הבא שהיא מחזירה זה את הברנד ניים אז אנחנו שמים פה פרופ סטרינג ברנד ניים הדבר הבא שהיא מחזירה זה הקוונטיטי אז אנחנו שמים פה פרופ אינט קוונטיטי כאן דרך אגב אנחנו יודעים שהוא הולך להביא
לנו ברנד ניים בכל מקרה זה יהיה נל סימן קריאה בואו נסתכל רגע על המודלים. ברנד, מעל ה-Name יש לנו את זה, אז אנחנו רוצים לשים פה את זה.
קוונטיטי, מה יש מעל הקוונטיטי? כלום. קוונטיטי מוגדר כסימן שאלה, בסדר, נגדיר אותו גם כן סימן שאלה. מה יש מעל ה-Inventory Item ID?
Inventory Item, יש פה Key, אבל אצלנו זה גם ה-Key? בעצם לא, אצלנו זה Keyless, כי אנחנו, לא מעניין אותנו מה-key הזה. אז בואו ניקח keyless ונשים אותו פה כי זה DTO.
מבחינתי זה רק דאטה שמוחזר מהדאטאבייס. לא אכפת לי אם הוא מפתח כן או לא. הנה יש לנו קלאס שמתאימה בדיוק למידע שה-stored procedure הולכת להחזיר לנו.
יופי. נקסט, מה אנחנו עכשיו עושים עם הדבר הזה? צריכים להיזכר איך אנחנו הבאנו את המידע מה-Stored Procedure כשהיינו בפרויקט מסוג Code First.
ומה שעשינו זה הלכנו לקונטקסט ובנינו קולקשן מיוחד שדרכו המידע הוחזר. והקולקשן המיוחד שדרכו המידע הוחזר היה מעין קולקשן כזה של In-Stock Inventory Items אבל אני לא יכול לגעת בקונטקסט הזה מפני שבפעם הבאה שאני אעשה זה כמובן לא היה אינסטוקינג וטורי אייטם זה היה איזשהו קולקשן מתאים למידע שהוחזר אבל אם אני אסתכל אני אראה
שגם הקונטקסט זה מחלקת פרשל בואו נשכפל אותה ctrl c ctrl v ניקח את ההעתק נעביר לאקסטנצ'נס ניפטר מהסיומת copy ניכנס אליה ניפטר מכל התוכן שיש לה