
AddBook מקבלת אובייקט Book, מוסיפה אותו עם _db.Books.Add, ואחר כך SaveChanges. ההוספה לבדה נעשית רק מקומית ב-Context, והשמירה היא שכותבת למסד. הפונקציה מחזירה את הספר שכבר מכיל את ה-ID שהמסד יצר.AddBook היא HttpPost לנתיב api/books, בלי ID, כי המסד יוצר אותו.[FromBody], והמערכת בונה אובייקט Book מה-JSON שבגוף הבקשה.dbBook ומחזירים אותה עם Created ולא עם Ok, כדי לקבל סטטוס 201. ל-Created מעבירים כתובת שבה אפשר לראות את הספר החדש, כלומר api/books/ ואחריה ה-ID של dbBook, ואת האובייקט עצמו.Created, וזה בסדר._db.Books.Add(book) ואחריה _db.SaveChanges()[HttpPost] ו-[FromBody]Created(...)הטקסט המלא של הדקות הראשונות בהרצאה «הוספת נתון חדש למסד נתונים» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
הפעילות הבאה שאני רוצה לבצע זה הוספת ספר. בואו נבנה לעצמנו פונקציה פה, public, מחזירה book, כי ראינו שאנחנו רוצים להחזיר את אותו הספר שמגיע לדטאבייס, add book שמקבל את אובייקט book.
אנחנו רוצים לגשת ל-tb.books ולהגיד לו add, הנה קיבלתי אובייקט book, בואו תוסיף אותו בבקשה, אבל הוא מוסיף אותו מקומית לאובייקט הקונטקסט.
הוא עדיין לא מבצע שום דבר שקשור לדטאבייס, אז הדבר הבא שנגיד לו זה db.saveChanges, אין לי יותר מה לעשות עם ה-ObjectContext או עם הספר, הוספתי אותו לקולקשן הזה, עכשיו תשמור את השינויים בדטאבייס, ותחזיר לי את אותו בוק חדש, שבשלב הזה כבר מכיל את הקוד החדש הדטאבייס יצר עבורו.
בואו נקרא לפונקציה מכאן, אני רגע אשכפל, זה פונקציה פה אחרונה, ואנחנו רוצים לקרוא לה. add book, אנחנו רוצים, עכשיו אין לנו פה ID, אז בואו נתחיל לראות מה אנחנו בעצם משנים.
קודם כל זה לא אמור להיות HTTP get כפי שלמדנו, זה אמור להיות HTTP post, זה עבור הוספה. אנחנו רוצים לגלוש ל-API books, אנחנו לא צריכים לשלוח שום ID מהלקוח או מהfrontend, הדטאבייס יוסיף לנו.
אנחנו רוצים לקבל כאן לסוגריים את הספר, בוק, בוק, בצורה כזאת. ולהגיד לו שהמקור של הדבר הזה זה from הבאדי של הרקווסט. אז הוא בעצם ילך לבאדי של הרקווסט, וישלוף משם את ה-json, ויבנה לנו object book מה-json שמתקבל.
יש לנו object book, אנחנו רוצים לבצע book db book, כלומר הספר שכבר היה בדטאביס ואוספנו אותו. שווה לסרוויס, נקודה add book ולשלוח את הספר שהלקוח שלח לנו.
בואו נפטר מזאת ואנחנו בעצם רואים שהספר שהתקבל בריקו-אס נמצא פה, שלחנו אותו לפונקציה הזאת, הפונקציה הוסיפה אותו לדטאבייס, שמרה את השינויים אז עכשיו הוא מכיל את המידע שקיים גם בדטאבייס, לדוגמה ID, עושים לו return, מחזירים אותו לפה.
זה הספר שכבר קיים בדטאבייס, DB Book. אנחנו רוצים להחזיר בחזרה את ה-DB Book, אבל לא על ידי פונקציית אוקיי, אלא על ידי פונקציית Created.
כי פונקציית Created תגדיר לנו שהסטטוס קוד הוא 201, כמו שלמדנו עבור הוספה. פונקציית Created אומרת לנו דבר כזה. אנחנו צריכים לתאר לה, בואו רגע נראה את ה-Intellisense שהוא מציג לנו.
אנחנו צריכים לתאר לה ככה, איפה נמצא או איזה כתובת אפשר לגלוש אליה בשביל לראות את הספר החדש שהתווסף. הכתובת שאפשר לגלוש אליה בשביל לראות את הספר החדש שהתווסף זה הכתובת הזאת, API Books עם ה-ID החדש.
אז אנחנו רוצים להגיד ש-api.books.slash ולתת לו פה את ה-Book ID שבשלב הזה כמובן כבר יש לו ID. כי זה אחרי, סליחה, לא בוק, אלא דיבי בוק, כי זה כבר אחרי השמירה בדטאבייס, אז הוא מכיל את ה-ID, יש את הספר הזה.
זאת אומרת, אם יגלשו לכתובת הזאת, אז אתם תראו את הספר שכרגע הוספנו. וזה בעצם כלל כזה שהפונקציה דורשת, הקריטת דורש מאיתנו לשלוח. והדבר הבא זה, תן לי את המידע שאני רוצה להחזיר, זה יהיה דיבי בוק.
ופה סיימנו לבנות את הפונקציה add book. בואו נבדוק אותה. כונטורל אופרומש. מריץ לי את כל המערכת, אנחנו הולכים ל-postman, אנחנו משכפלים פה request, duplicate, אנחנו קוראים ל-request הזה, add book, אנחנו מגדירים שהוא יהיה post ולא get, ואנחנו רוצים לגלוש ל-api
books, בלי שום ID, אבל אנחנו רוצים לגשת לאזור של ה-body, raw json, ופה לבנות אובייקט json שהולך להישלח. איזה אובייקט ג'ייסון אני צריך לשלוח?
אם הייתי הולך ל-get one book, הייתי רואה