linq to sql
-
שלום לכולם
יש לי datacontext שאני צריך שיהיה אמין ביותר, כלומר כל מה שאני שואל אותו אני רוצה תשובה ישירה מהמסד נתונים, ולא מהאוספים שלו.עשיתי קוד כזה
public static DataBaseClassesDataContext db {get {return new DataBaseClassesDataContext(); }}
כאשר מכל המחלקות אני מקבל גישה למאפיין הזה.
השאלה האם באמת הוא יוצר חדש בכל קריאה למאפיין, או שאחרי שהוא יצר, הוא משתמש באותו מופע.
אם נניח שהוא יוצר חדש, האם זה זולל משאבים, או שהוא מתשאל את המסד רק את מה שצריך.
האם אני צריך לסגור בכל פעם את החיבור, או שCLR יודע מתי אני מפסיק להשתמש במופע וסוגר עבורי את החיבור.
והאם זה לא עלול ליצור חיבורים מקבילים רבים אם בכלל יש בזה הכבדה על המסד (או שלא...).
שלושת השאלות האחרונות, הינן בהנחה שהמאפיין אכן יוצר מופע חדש בכל פעם.פורסם במקור בפורום CODE613 ב25/02/2014 01:14 (+02:00)
-
יש לי datacontext שאני צריך שיהיה אמין ביותר, כלומר כל מה שאני שואל אותו אני רוצה תשובה ישירה מהמסד נתונים, ולא מהאוספים שלו.
אם כל מה שאתה מפחד זה שהמסד השתנה וזה לא עודכן באוספים, אז תדאג לעדכון שוטף של ה datacontext מהמסד וזהו.
פורסם במקור בפורום CODE613 ב26/02/2014 11:57 (+02:00)
-
- לכאורה (לא בדקתי) זה יוצר מופע חדש בכל פעם.
- בדוט נט יש מושג שנקרא Garbage collection, שזה מערך "איסוף זבל" הבודק איזה אובייקטים לא בשימוש ו"הורג" אותם. - כדאי קצת לקרוא ע"ז ולהבין יותר, אני רק יאמר שבגלל זה בקלאסים כדאי לשים גם פונקציית Dispose כדי להרוג בצורה ידנית.
- מהסיבה הנ"ל א"א לומר שהוא זולל משאבים, זה ממש כמו הצהרה שלך עם NEW בקוד.
- נראה לי שחיבורים מקבילים יוצרים בעייה, ( אם בקוד שלך באותה פונקצייה תיצור 5 אבייקטים אתה בעצם יוצר 5 חיבורים בו זמנית [למרות שיכול להיות שאכן הCLR מטפל בזה שהכל יהיה חיבור אחד מאחורי הקלעים])
למה בעצם לא לעשות משתנה גלובלי של הDataBaseClassesDataContext, שיכול להיות מבוטא גם כפרופרטי גלובלי, אבל בלי NEW כל פעם, ההיגיון אומר שLINQ לא ניגש לDB ומביא שום דבר עד התישאול עצמו, וגם שבכל פעם שתעשה סלקט מהDB הוא ניגש שוב. (אא"כ תעשה סלקט על אובייקט שיצרת מהDB, שאז הוא לא צריך לגשת לDB והוא מתייחס לזה כאל מערך פנימי)
פורסם במקור בפורום CODE613 ב26/02/2014 12:57 (+02:00)
-
אם כל מה שאתה מפחד זה שהמסד השתנה וזה לא עודכן באוספים, אז תדאג לעדכון שוטף של ה datacontext מהמסד וזהו.
וודאי שזה האידיאלי הבעיה שבחיפושים שלי באינטרנט הבנתי שאין פקודה כזאת של חיבור מחודש לדטה בייס.
מה שכן ייתכן שכל תישאול שעוד לא היה קודם כן מתקשר לדטה בייס מחדש. הבעיה זה עם שאילתות שכבר נעשו מן הסתם לא מאוחזרות, קשה למצוא חומר ברור בנושא הזה.פורסם במקור בפורום CODE613 ב26/02/2014 14:48 (+02:00)
-
אני לא כל כך מבין את הבעיה, בכל רגע נתון אתה יכול להתחבר לSQL SERVER ולשלוח איזה פקודה שתרצה אם זה שאילתת בחירה או עדכון או שאר פקודות, וכך תקבל את המידע שנמצא באותו רגע במסד, מה שאני כן חושש זה שאחד המשתמשים עדיין לא עדכן את המסד בשינוים שהוא ביצע והשינויים עדיין נמצאים רק בדטה-סט.
פורסם במקור בפורום CODE613 ב26/02/2014 14:53 (+02:00)
-
אני לא כל כך מבין את הבעיה, בכל רגע נתון אתה יכול להתחבר לSQL SERVER ולשלוח איזה פקודה שתרצה אם זה שאילתת בחירה או עדכון או שאר פקודות, וכך תקבל את המידע שנמצא באותו רגע במסד
אני מחפש פתרון במסגרת הספרייה של linq to sql (להתחבר לדטה בייס לבד אפשר גם עם C או אסמבלר :lol: :lol: :lol: ) אמרתי שלא נמצאה פקודה שלוקחת את האוסף ומרפרשת אותו ביחס לדטה בייס. (פקודת ריפרש לא עושה את זה) העצה שכולם מציעים בסטאק אוברפלוו וכדומה, זה שהדטה קונטקסט הוא כלי קצר טווח בתוכנה, תפקידו לתשאל ולעבור מן העולם. וזה מה שהדליק לי נורה אדומה לבדוק באמת את האמינות של הכלי הזה והאיכות שלו.
פורסם במקור בפורום CODE613 ב26/02/2014 17:18 (+02:00)
-
@רחמים
אם כל מה שאתה מפחד זה שהמסד השתנה וזה לא עודכן באוספים, אז תדאג לעדכון שוטף של ה datacontext מהמסד וזהו.וודאי שזה האידיאלי הבעיה שבחיפושים שלי באינטרנט הבנתי שאין פקודה כזאת של חיבור מחודש לדטה בייס.
מה שכן ייתכן שכל תישאול שעוד לא היה קודם כן מתקשר לדטה בייס מחדש. הבעיה זה עם שאילתות שכבר נעשו מן הסתם לא מאוחזרות, קשה למצוא חומר ברור בנושא הזה.נראה לי דיי פשוט לבדוק את זה, להוסיף רשומה בתוך הDB באופן ישיר, ואז לבדוק אם הרשומה קיימת בLINQ.
השכל הישר שלי מבין שלינק פונה שוב בכל בקשת סלקט חדשה (ואפילו אם תושאלה לפני כן) לDB, מהטעם שDB + LINQ נועד בדיוק לדברים כאלו!!
ובמקרה שלך לא מדובר על ריפרש, אלא על אובייקט חדש וסלקט חדש.עצה נוספת שנראית לי כרגע, תנסה במקום פרופרטי להשתמש בפונקצייה גלובלית (או סטטית בתןך קלאס) שרק מחזירה אובייקט חדש.
פורסם במקור בפורום CODE613 ב26/02/2014 20:08 (+02:00)