
הטקסט המלא של הדקות הראשונות בהרצאה «LINQ ל- SQL» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אוקיי אז מה שראינו בשיעור הקודם זה היה לינק טו אובג'קט בו אנחנו לקחנו אובייקט שהוא קולקשן ועשינו עליו כל מיני פעולות של שאילתות כלומר עשינו עליו שאילתות בשפת פישארט בעזרת התחביר של לינק עכשיו אנחנו הולכים לעבור ללינק טו sql לינק טו sql כמו
שראינו זה בעצם ביצוע שאילתות על קולקשנים שחוזרים לנו ממסד נתונים sql סרבר אז אנחנו הולכים להתחבר למסד נתונים sql סרבר למסד הנתונים החינמי Northwind להביא משם את כל מה שאנחנו צריכים בעצם אנחנו נביא את כל הטבלאות אלינו אבל אנחנו לא באמת נביא טבלאות אנחנו נביא רק סכמה של קולקשנים אנחנו תכף נראה איך זה
מתבצע ואז בעזרת שאילתות לינק אנחנו הולכים לעשות פעולות אנחנו הולכים לבצע insert אנחנו הולכים לבצע update אנחנו הולכים לבצע delete אנחנו הולכים להביא אוסף של רשומות אנחנו הולכים להביא פריט בודד ואנחנו הולכים גם להשתמש בסטורט פרוסידג'רס אז לצורך כך יש לנו כאן אתר אינטרנט ריק
מה שאנחנו הולכים לעשות אנחנו עובדים גם כאן על מודל השכבות שלמדנו באחד השיעורים האחרונים ב-ADO.NET. מודל השכבות אומר דבר כזה יש לנו את מסד הנתונים ואז יש לנו את צד האפליקציה אתר האינטרנט אבל זה לא נכון שאתר האינטרנט ייגש ישירות לבסיס הנתונים אלא עדיף שהוא יעבור בשכבה אחת באמצע או שתיים.
אז ב-ADO.NET היו לנו שתי שכבות היה לנו את הדל שביצע פעולות על מסד הנתונים בעזרת קונקשן והוא היה כללי לגמרי לכל הפעולות של כל האפליקציות שיכולות להיות.
הייתה לנו שכבה שנקראת ביזנס לוג'יק שבעצם אפשרה לנו להגדיר את הלוגיקות הדרושות ספציפית לאפליקציה שלנו והביזנס לוג'יק קרא לה דל. כרגע בגלל שאנחנו עובדים עם לינק אז לינק חוסכת לנו את הדל תכף אנחנו נראה למה.
אנחנו לא צריכים שיהיה לנו פה את ה-dll שלמדנו עליו בעבר שנקרא דל אלא אנחנו צריכים רק את הלוגיקות כמובן באפליקציה שלנו יש בכל אפליקציה יש לוגיקות ספציפיות לגבי האפליקציה ולכן הביזנס לוג'יק מחזיק לי עדיין את הלוגיקות האלה.
בואו נראה איך אנחנו עובדים אז קודם כל יש לנו פה סלושן שקראתי לו לינק 2 sql יש לי כאן dll אחד שנקרא ביזנס לוג'יק והוא יחזיק את הפעולות הלוגיות שקשורות לאתר האינטרנט שלנו יש לנו כבר מחלקה שנקראת בייס לוג'יק ויש לנו אתר אינטרנט שהולך להשתמש בביזנס לוג'יק בשביל להוציא לפועל את מה שהוא רוצה על מסד הנתונים בשביל שאנחנו נעבוד עם לינק על sql אנחנו צריכים להוסיף
לביזנס לוג'יק שלנו פריט חדש בואו נוסיף new item והפריט שאנחנו צריכים להוסיף נקרא link to sql classes בואו נחפש אותו הנה הוא כאן קודם כל זה דף בעל סיומת dbml מה שנהוג לעשות זה לתת קודם כל שם משמעותי לקובץ הזה ונהוג שהשם הזה יהיה כמו שם מסד הנתונים שם מסד הנתונים שאנחנו יכולים להתחבר
אליו הוא northwind ולכן אני אגדיר northwind עכשיו אני מבצע add ומה שקורה זה שיש לי כרגע דף לבן חדש לגמרי שנקרא northwind.dbml זה בעצם קובץ שנקרא Northwind.dbml והוא אומר לי שכאן אני צריך להגדיר איזה טבלאות ממסד הנתונים אני רוצה להשתמש בהן.
אנחנו הולכים ל-Server Explorer, זה בעצם חלונית שמראה לי את כל השרתים שהמחשב שלי מכיר. ואני רואה שיש לי פה, בואו נמחק רגע את שני הקונקשנים האלה בשביל לבצע את זה מההתחלה, yes, ואת הקונקשן הזה, yes.
בדרך כלל כשאנחנו פותחים משהו חדש אז זה המצב שמופיע לנו. עכשיו אני רואה שיש לי פה מעין ספרייה שנקראת Data Connections.
אני יכול ללכת וליצור Connect to Database, קונקשן חדש. אני מקבל כרגע חלונית שאומרת לי לאיזה מסד הנתונים אתה רוצה להתחבר. בעזרת Change אני יכול להגיד לה להתחבר למסדי נתונים שונים, אבל בגלל שאנחנו משתמשים ב-Link to SQL, המסד נתונים היחידי שאני יכול להתחבר אליו זה SQL Server,
בדיוק כמו פה. אז אני מבצע אוקיי. הדבר הבא שהמערכת אומרת לי זה מה Server Name. מה שקורה, המערכת בעצם בונה לי כרגע את ה-Connection String עבור לינק בצורה אוטומטית.
אז הסרבר שראינו אותו בעבר ב-Connection String היה נקודה שמציינת את המחשב הנוכחי, ובגלל שכרגע במחשב שלי יש את SQL Server Express, אז אני רושם SQL Express.
הדבר הבא זה הדאטאבייס, לאיזה דאטאבייס אנחנו רוצים להתחבר. אז אנחנו רוצים להתחבר ל-Northwind. דבר נוסף, אם אני לא רוצה להשתמש ביוזרנר ופסוורד של Northwind, אז אני מגדיר use windows authentication.
כאן הוא ייצור לי trusted connection שווה true אם היה לי username וpassword אז הייתי כמובן צריך לאפשר אותם כאן ואז להתחבר למסד הנתונים. אני יכול לבצע פה בדיקה test connection ולראות אם הוא באמת הצליח אני רואה שהוא הצליח להתחבר למסד הנתונים בעזרת ההגדרות שנתתי לו ואז אני מבצע אוקיי ואני רואה שהמערכת מתחברת
לי לתוך Northwind ויוצרת לי פה את הלינק הזה שמראה לי את כל הטבלאות שיש ב-Northwind. אז אני ניגש ופותח את כל הטבלאות ועכשיו אני רוצה לומר למערכת אילו טבלאות אני רוצה להשתמש בהן.
אז אני יכול לבחור טבלה או שתיים ואז לגרור אותן לתוך האזור הריק הזה, או שבדרך כלל אני כנראה ארצה להשתמש בכל הטבלאות אז אני פשוט בוחר את כל הטבלאות וגורר אותן לתוך האזור הלבן ועוזב.
עכשיו מה שלינק עושה היא יוצרת לי מחלקות מכל טבלה יוצרת לי מחלקה. בואו נסתכל רגע על התרשים שהולך להיווצר לי, נסגור את החלונית הזאת, את זה נצמצם טיפה, ואנחנו יכולים אפילו להגדיל את זה עם קונטרול והגלילה של העכבר ולראות את האישויות השונות שלינק הצליחה לבצע.
לדוגמה בואו ניקח את טבלת המוצרים שיש לנו. בואו נחפש אותה כאן, אנחנו רואים אותה פה. בואו נסתכל רגע מה היה השם של הטבלה המקורית במסד הנתונים. נחזור למסד הנתונים והשם היה products ברבים וזה שם נכון לגמרי לטבלה.
שמות טבלאות תמיד צריך להיות ברבים מפני שטבלה תמיד מחזיקה לי מספר פריטים אז השם נקרא products עם s עכשיו אני מסתכל ואני רואה מה לינק יצרה לי מהטבלה הזאת ואני רואה שלינק יצרה לי בעצם ישות שנקראת product ביחיד אז לינק יודעת לבד להפוך רבים ליחיד והיא עושה את זה די טוב יש לה
לפעמים פאשלות במקרה הזה לדוגמה אם יש לכם טבלה שנקראת sms אז היא תיצור לכם sm כמובן כי היא לא יודעת שהטבלה היא ביחיד ולכן טבלאות תמיד צריכות להיות ברבים אם הייתי מגדיר טבלה של sms הייתי קורא לה sms כי היא מחזיקה לי המון smsים או אם יש לי טבלה שנקראת money אז היא הייתה יוצרת לי money והיא הייתה עושה את זה בטיפה שגיאת כתיב כי היא לא תמיד עושה את זה בצורה הנכונה ואני
תמיד יכול ללכת לכאן ולשנות את מה שהגדירה לי. אבל בדרך כלל היא מצליחה לקלוע בול לשמות ומצליחה להעביר לי שמות מרבים ליחיד.
זה בדיוק הישות הזאת שלינק יצרה לי אז לינק בעצם יצרה ישות שמתארת לי מחלקה אחת שהשם של המחלקה זה product אם אני רוצה לראות איפה המחלקה הזאת נמצאת אז מתחת לקובץ dbml אני רואה שיש לי designer.cs אם אני נכנס לדיזיינר.cs אני רואה שזה קובץ עצום שנכתב בc-sharp שיש בו פשוט את כל המחלקות שלינק יצרה אוטומטית ממש על ידי זה שגררתי אם אנחנו נחפש פה
קלאס פרודקט נראה שהגענו למחלקה פרודקט של לינק יצרה מהטבלה פרודקט שהייתה קיימת לי במסד הנתונים הדאטה ממברס והמאפיינים של לינק יצרה זה בדיוק השדות או יותר נכון העמודות שיש לי בטבלה אני רואה שיש לי פה עמודה פרודקט ניים סופלייר איידי קטגורי איידי פרודקט איידי ואלו בדיוק המחלקות הדאטה ממברס של לינק יצרה לי אני רואה פרודקט איידי
פרודקט ניים, סופלייר איידי, קטגורי איידי וכו'. עכשיו בואו נחזור רגע ונראה את הטבלה עצמה כישות. אני רואה שיש לי טבלה פרודקטס ויש לה פרודקט איידי, פרודקט ניים, סופלייר איידי, כל עמודה שהייתה קיימת לי במסד הנתונים, לינק הכניס אותה כמאפיין במחלקה החדשה.
בנוסף אני רואה שכל הקשרים בין הטבלאות גם הם הגיעו אליי לאוסף הטבלאות הזה. ב-adiodonet הישן ראינו כשאנחנו הבאנו לדאטה סט מספר טבלאות, הכישורים ביניהם לא עברו ואנחנו היינו צריכים לעבוד קשה בתכנות בשביל ליצור את הקונקשנים בין הטבלאות השונות.
לינק יוצרת את זה אוטומטית. אז כל מה שנשאר לנו לעשות זה לשמור, לסגור את החלונית הזאת, לבצע בנייה בכדי לתפוס את כל השינויים, אני רואה שהוא כותב לי build succeeded, ואז ללכת ל-Business Logic ופשוט להתחיל לכתוב את הקוד שלנו.
דבר ראשון יש לנו בביזנס לוג'יק מחלקה שנקראת בייס לוג'יק והיא מחלקת הבסיס של כל מחלקות הלוגיקה שאנחנו הולכים להשתמש איתן.
בבייס לוג'יק אני מגדיר את אותו אובייקט של לינק שמחזיק לי את כל הסכמות של הקולקשנים. בעזרת האובייקט הזה אני אוכל עכשיו לבצע פעולות על מסד הנתונים.
אז אני מגדיר כאן פרייבט ואת הטיפוס נתונים. הטיפוס נתונים של האובייקט לינקי הזה המיוחד ושם קובץ ה-DBML שיצרנו נורפרינד, עם הסיומת data context בואו נקרא לו dc אז אני יוצר ממנו אובייקט חדש ואני אחשוף פרופרטי שמחלקות יורשות יוכלו להגיע אליו אם אני רוצה שרק מחלקות יורשות יוכלו לגעת בישות הזאת אז אני חושף את זה בעזרת הרשאת הגישה פרוטקטד פרוטקטד זאת הרשאת גישה שאומרת מי
שיהיה מסוגל לגעת באותו מרכיב שאני כותב כאן זה רק המחלקה המקומית ומחלקות שיורשות ממנה אז בואו נגדיר protected northwind data context dc ונגדיר לו רק פונקציית get שמחזירה את ה-dc המקומי בדרך כלל נהוג שאם יש לכם משתנה שהוא private מקדימים אותו ב-underline בואו נגדיר פה underline וזה בעצם מוסכמה מאוד מאוד טובה כך שמתכנת אחר
שרואה משתנה עם underline יודע אוטומטית שהוא data member פרטי והוא חשוף רק למחלקה הנוכחית אז כעת ציינו לכתוב את ה-base logic ואנחנו יכולים ללכת לביזנס לוג'יק ולצרף מחלקה אחרת שמטפלת בו נניח רק בטבלת המוצרים.
אז אני מוסיף כאן מחלקה שנקראת פרודקטס לוג'יק ואז במחלקה פרודקט לוג'יק קודם כל אני נותן הוראה תרשי את הבייס לוג'יק. לא לשכוח להגדיר את המחלקה כפאבליק אחרת היא לא תהיה חשופה מחוץ לדירל.
בגלל שירשתי את הבייס לוג'יק למחלקה שלי יש את כל מה שיש לבייס לוג'יק ואני יכול להגיע רק כמובן לדברים שהם לא פרייבט. זאת אומרת שאני יכול עכשיו להגיע ל-DC הזה ולבצע עליו פעולות.
DC, קיצור של Data Context. אז בואו נסתכל איך אנחנו עושים את זה. אז ראשית, בואו נגדיר פונקציה להוספת מוצר. אז יש לנו פה public void add product. בשביל להוסיף מוצר בואו נקבל לדוגמה את המינימום שאנחנו צריכים.
String product name decimal unit price. כעת אני רוצה להוסיף את המוצר החדש הזה לטבלת המוצרים. איך אני מוסיף מוצר?
אז מה שאני צריך לעשות זה קודם כל ליצור אובייקט מהמחלקה החדשה שמתארת לי מוצר אחד שלינק יצרה לי אוטומטית.
האובייקט הזה הוא מטיפוס product, מפני שאנחנו ראינו מקודם שלינק יצר לי מחלקה חדשה שנקראת product והיא מתארת לי מוצר חדש. אז בואו ניצור prod=new product.
אחרי שיצרתי את זה אני פונה למוצר שלי ואני מתחיל למלא אותו בערכים, לדוגמה product name=product name שהתקבל לפונקציה. לדוגמה prod.unitPrice שווה ל-unitPrice שהתקבל לפונקציה ואחרי שסיימתי להגדיר את כל ההגדרות שאני רוצה עבור המוצר החדש אני עכשיו צריך ללכת ולהוסיף את המוצר החדש לטבלת המוצרים.
אז ראינו מקודם את הישות המוזרה הזאת שנקראת DC. DC היא ישות data context שמכילה לי כאילו את הקולקשנים השונים ששייכים למסד הנתונים ואני רואה שיש לי פה קולקשן שנקרא פרודקטס והוא מחזיק לי את כל האובייקטים של טבלת פרודקטס למעשה לינק לא סתם מביאה מידע כרגע אני לא צריך שום מידע ממסד הנתונים לינק לא הביאה לי לכאן את כל
הערכים שנמצאים בטבלת פרודקטס הישות הזאת פרודקטס זה רק סכמה ורק כאילו שלד של איך נראה אוסף של טבלת המוצרים עכשיו אני הולך לאוסף הזה כביכול ומוסיף על ידי פונקציה שנקראת insert on submit ואני מוסיף לה את המוצר החדש שכרגע בניתי.
אחרי שעשיתי את זה אני קורא ל-DC.SubmitChanges. רק SubmitChanges תשמור את המידע הזה למסד הנתונים. למה עשו את זה בצורה כזאת?
בכדי שתהיה לנו את האפשרות להוסיף כל מיני דברים לסכמות של הטבלאות ובבת אחת להכיל את כל השינויים האלה על מסד הנתונים. כל מה שנשאר לנו לעשות כרגע זה רק לקרוא לפונקציה הזאת מאתר האינטרנט שלנו.
אז לצורך כך אנחנו חייבים שאתר האינטרנט יכיר את ה-DLL. אז בואו נלחץ על Add Reference ונוסיף את ה-DLL הזה לאתר האינטרנט.
אני רואה אותו פה בתיקייה Projects ואני מוסיף אותו ועכשיו אני רואה אותו כאן בבין של אתר האינטרנט.