דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. אנטיטי ב C# - שאלות

אנטיטי ב C# - שאלות

מתוזמן נעוץ נעול הועבר תכנות
33 פוסטים 4 כותבים 2.0k צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • ח מנותק
    ח מנותק
    חבלזון
    כתב ב נערך לאחרונה על ידי
    #1

    חברים יקרים
    אחרי פרויקטים באקסס ואחר כך בסי שארפ עם ADO
    הבנתי (והתנסיתי) שלעבודה ברשת זה ממש לא מוצלח...
    בתאוריה הבנתי את הרעיון של סביבת אנטיטי, ואשמח מאוד לעזרת החברים היקרים בשאלות שיעלו לי. הסביבה שלי - מסד נתונים של SqlServer, אני כותב בC# .
    שאלה ראשונה - מהי הדרך (או מה עלי ללמוד) כדי שאוכל לשלוח בקשה לשרת שיחזיר לי רק את השורות הרלוונטיות. בפרויקט שהתחלתי תוך כדי לחץ, בלית ברירה הרצתי שאילתות על אוביקט List שנטען מהטבלה. אני ודאי לא צריך לתאר את הקטסטרופה של הדבר, וכמה זמן לקחה כל בקשה.... אז ברור שזו לא הדרך, במיוחד כשמדובר על כמות גדולה מאוד של נתונים. אשמח אם תכוונו אותי לדרך הנכונה.

    clickoneC תגובה 1 תגובה אחרונה
    1
    • clickoneC מנותק
      clickoneC מנותק
      clickone
      השיב לחבלזון ב נערך לאחרונה על ידי
      #2

      @חבלזון
      תעשה where לפני הToList
      ככה

      var q = db.Tbl123.Where(x => x.Status == 1 && x.UserName=="abc" );
      

      אח"כ אתה יכול לרוץ על זה בלולאה או כל מה שבא לך.
      אתה יכול לעשות לו גם המרה לליסט.
      בקיצור חגיגה ותענוג. באמת!

      אין טסט כמו פרודקשן.

      המייל שלי urivpn@gmail.com

      ח תגובה 1 תגובה אחרונה
      4
      • ח מנותק
        ח מנותק
        חבלזון
        השיב לclickone ב נערך לאחרונה על ידי
        #3

        @clickone תודה.
        מה אם אני צריך לכלול 2 טבלאות קשורות? (למשל - תן לי את כל ההזמנות ששם המשפחה של הלקוח שלהם מתחיל ב "abc") ?

        clickoneC תגובה 1 תגובה אחרונה
        1
        • clickoneC מנותק
          clickoneC מנותק
          clickone
          השיב לחבלזון ב נערך לאחרונה על ידי
          #4

          @חבלזון
          יש לך קשרים בDB?
          אם כן, הוא יזהה את זה אוטומטית
          ואז:

          var q = db.Tbl123.Where(x => x.Status == 1 && x.TblCust.Family.StartsWith("abc") );
          
          

          אין טסט כמו פרודקשן.

          המייל שלי urivpn@gmail.com

          ח תגובה 1 תגובה אחרונה
          1
          • ח מנותק
            ח מנותק
            חבלזון
            השיב לclickone ב נערך לאחרונה על ידי חבלזון
            #5

            @clickone יש קשרים, כמובן. אני מתחיל לעבוד...
            רק עוד בירור קצר, אני רגיל יותר להשתמש ב Linq זה יעבוד אותו דבר אם אכתוב כך:

            var q = from x in db.tb1123 where x.status = 1 && x.tblCUst.Family.StartsWith("abc")) select x;
            clickoneC dovidD 2 תגובות תגובה אחרונה
            1
            • clickoneC מנותק
              clickoneC מנותק
              clickone
              השיב לחבלזון ב נערך לאחרונה על ידי
              #6

              @חבלזון
              כן זה יעבוד.

              תהנה 🙂

              אין טסט כמו פרודקשן.

              המייל שלי urivpn@gmail.com

              תגובה 1 תגובה אחרונה
              1
              • dovidD מנותק
                dovidD מנותק
                dovid ניהול
                השיב לחבלזון ב נערך לאחרונה על ידי
                #7

                @חבלזון אמר באנטיטי ב C# - שאלות:

                רק עוד בירור קצר, אני רגיל יותר להשתמש ב Linq

                אתה מתכוון לתחביר שמכונה Query Syntax, לעומת התחביר של @clickone שמונה Flunet Syntax.
                שניהם נקראים Linq וההבדל הוא תחבירי בלבד.

                מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                בכל נושא אפשר ליצור קשר dovid@tchumim.com

                תגובה 1 תגובה אחרונה
                3
                • ח מנותק
                  ח מנותק
                  חבלזון
                  כתב ב נערך לאחרונה על ידי
                  #8

                  שאלה נוספת:
                  אני עומד עכשיו בכתיבת הקוד, כאשר אני עומד לשמור מידע של 3 ישויות שונות.
                  לקוח חדש (customer) שביצע הזמנה חדשה (Order) והפרטים שלה (Details)
                  האם זה נכון לעשות כך - אוביקט הזמנה חדשה, ובו אני מגדיר את הלקוח כאוביקט חדש, ולרשימת הפרטים (collection) של אוביקט ההזמנה אני מוסיף שורות חדשות של פרטים.
                  זה נכון? כדאי לעבוד אחרת? אולי ליצור כל אוביקט בנפרד ואחר כך לקשר?
                  תודה!

                  תגובה 1 תגובה אחרונה
                  0
                  • dovidD מנותק
                    dovidD מנותק
                    dovid ניהול
                    כתב ב נערך לאחרונה על ידי
                    #9

                    לאשכול של אובייקטים באנטיטי קוראים גרף (לא יודע למה).
                    אני מבין שאתה שואל האם לקשר לאובייקטים שלא מחוברים עדיין לDataBase (וממילא ללא מפתח לשיוך), ע"י השמת אחד בתוך הNavigation Property של השני, ולשמור הכל במכה, זה תקין או לא.
                    התשובה היא שבדרך כלל זה מצויין.
                    רק שיש סיטואציות (למשל בארכיטקטורת ווב, כאשר אתה לא מקבל מיידית את כל הנתונים וכדומה) שזה לא יעבוד טוב ואז תצטרך לשמור קודם אב, ואז להשתמש בערך המזהה שלו לפעולות השרשרת הבאות.

                    מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                    בכל נושא אפשר ליצור קשר dovid@tchumim.com

                    תגובה 1 תגובה אחרונה
                    2
                    • ח מנותק
                      ח מנותק
                      חבלזון
                      כתב ב נערך לאחרונה על ידי חבלזון
                      #10

                      שאלה 4:
                      בעצם אם המערכת הזאת חוסכת ממני את הצורך בעבודה מול מסד הנתונים, האם יש אפשרות לעלות שלב. התוכנה שאני עובד עליה אמורה להיות מותקנת במחשבים רבים לצורך הזנת נתונים, ובמחשב ראשי לצורך ניהול ועיבוד.
                      הנקודות שאני מעוניין בהם לגבי המחשבים של הזנת הנתונים:

                      1. שלא אצטרך כלל לטפל בנושא של מסד הנתונים (למשל התקנת תוכנת DB כלשהי)
                      2. שהנתונים ישמרו מוצפנים באופן קריא רק על ידי התוכנה שלי

                      לפי צורת הפעולה של האנטיטי, אם תהיה ספריה כלשהי שתשמור את הנתונים כנ"ל, ותתפקד מול האנטיטי כמו מסד נתונים, הרי שזה אמור לפעול מצוין. כמובן שהחיסרון יהיה שאין לי שום נגישות לנתונים חוץ מהתוכנה שלי, אבל במקרה הזה זה בדיוק מה שאני מחפש.
                      אני מדבר בדווקא על ספריה כלשהי, שתפעל כחלק מהתקנת התוכנה שלי בלי שום צורך בדרייבר או בהתקנה נוספת. מקווה שהסברתי את עצמי כראוי.
                      באם חכמי הפורום אינם מכירים כזה דבר / יודעים שזה לא אמור לעבוד, אשמח להצעות אחרות לנקודות שהעליתי. ותודה מראש...

                      תגובה 1 תגובה אחרונה
                      0
                      • ח מנותק
                        ח מנותק
                        חבלזון
                        כתב ב נערך לאחרונה על ידי חבלזון
                        #11

                        אני חוזר לשאלות של מתחילים
                        שאלה 5:
                        מה הדרך הנכונה והמומלצת לטיפול בעדכון אשכול של נתונים (graph כמו שלמדתי כאן) באמצעות טופס (wpf), כאשר אני רוצה לנצל את המעלות של ה Binding לפקדים, אבל יש כמובן לחצן ביטול שמבטל את כל השינויים בטופס הזה.
                        האם לאגד את כל האשכול לטופס, ובביטול לטעון אותו מחדש מהמסד? אולי ליצור עותק ולעבוד עליו, ואז להשתמש בSetValues שאני עוד לא כל כך מכיר, או שיש דרך פשוטה הרבה יותר?
                        שאלה 6:
                        שאלה כללית, הדרך בה עבדתי עד היום, זה ליצור מחלקה סטטית לניהול הנתונים ושאר המחלקות ניגשים אליה. האם זה נכון גם פה? או שמא כדאי לפעמים או תמיד ליצור אוביקט חדש של ה DbContext שלי?

                        clickoneC תגובה 1 תגובה אחרונה
                        0
                        • clickoneC מנותק
                          clickoneC מנותק
                          clickone
                          השיב לחבלזון ב נערך לאחרונה על ידי
                          #12

                          @חבלזון
                          לגבי 6: במעבר מאקסס תמיד הייתי הולך על מחלקה סטטית ש"חיה" לאורך כל חיי התוכנית.
                          עד שלמדתי שיותר נכון לקרוא כל פעם מחדש לDB.
                          כמובן באותו חלון ובאותה בקשה כל אחד.
                          מצד שני, היום אני בווב, ושם זה בוודאי מתנהל אחרת (בכל קריאה לדף הכל מתחיל מחדש)
                          משא"כ ביישום WPF.

                          אין טסט כמו פרודקשן.

                          המייל שלי urivpn@gmail.com

                          ח תגובה 1 תגובה אחרונה
                          1
                          • ח מנותק
                            ח מנותק
                            חבלזון
                            השיב לclickone ב נערך לאחרונה על ידי חבלזון
                            #13

                            @clickone אמר באנטיטי ב C# - שאלות:

                            כמובן באותו חלון ובאותה בקשה כל אחד.

                            כלומר - לכל חלון מופע db אחד? הבנתי נכון?

                            clickoneC תגובה 1 תגובה אחרונה
                            0
                            • clickoneC מנותק
                              clickoneC מנותק
                              clickone
                              השיב לחבלזון ב נערך לאחרונה על ידי
                              #14

                              @חבלזון
                              כן
                              אפשר כמשתנה פרייבט בחלון.
                              אני באמת מתחיל לתהות אם באפליקצייה שולחנית לא באמת עדיף אבייקט סטטי אד לכל התוכנית - כמו שחשבתי פעם
                              קשה לי להיזכר כעת למה הבנתי בסוף שזה לא נכון. כי זה היה ממש ממזמן. (משהו כמו 8 שנים לפחות)

                              אין טסט כמו פרודקשן.

                              המייל שלי urivpn@gmail.com

                              ח תגובה 1 תגובה אחרונה
                              0
                              • ח מנותק
                                ח מנותק
                                חבלזון
                                השיב לclickone ב נערך לאחרונה על ידי
                                #15

                                @clickone יכול להיות בגלל שיכול להיווצר מצב ש db.SaveChanges בחלון אחד
                                ישלח שינויים שכוחים / או באמצע תהליך מחלון אחר

                                clickoneC תגובה 1 תגובה אחרונה
                                1
                                • clickoneC מנותק
                                  clickoneC מנותק
                                  clickone
                                  השיב לחבלזון ב נערך לאחרונה על ידי
                                  #16

                                  @חבלזון
                                  בביינדינג אוטומטי זה ממש יכול להיות.
                                  נכון.
                                  לכאורה אם כך בחלון אחד אין את הבעייה הזו.

                                  אין טסט כמו פרודקשן.

                                  המייל שלי urivpn@gmail.com

                                  ח תגובה 1 תגובה אחרונה
                                  1
                                  • ח מנותק
                                    ח מנותק
                                    חבלזון
                                    השיב לclickone ב נערך לאחרונה על ידי
                                    #17

                                    @clickone אני מניח שזה שווה את הקריאה מחדש לconnection בפתיחת החלון.
                                    רק עזור נא לי, אם אני מבצע שמירה בחלון עריכה, איך אני מכניס את השינויים וההוספות לחלון הרשימה?
                                    בודאי לא Reload... הבנתי שיש פעולה שנקראת Attach, זה קשור לכאן? ו... איך?

                                    clickoneC תגובה 1 תגובה אחרונה
                                    0
                                    • clickoneC מנותק
                                      clickoneC מנותק
                                      clickone
                                      השיב לחבלזון ב נערך לאחרונה על ידי
                                      #18

                                      @חבלזון
                                      הידע שלי בWPF ממש חלש.
                                      (צריך לחכות ל @dovid ..)
                                      אולי בינתיים זה מקוום טוב להתחיל. (בטח ראית את זה כבר)
                                      בווב כאמור זה שונה.

                                      אין טסט כמו פרודקשן.

                                      המייל שלי urivpn@gmail.com

                                      ח תגובה 1 תגובה אחרונה
                                      1
                                      • ח מנותק
                                        ח מנותק
                                        חבלזון
                                        השיב לclickone ב נערך לאחרונה על ידי
                                        #19

                                        @clickone תודה. באמת הכנתי כבר את הפרויקט ההוא. שם הם פשוט שמים הכול בחלון אחד עם גרידים שמופיעים לפי הצורך. קשה לי להתחבר לרעיון, עדיין לא יודע למה...

                                        תגובה 1 תגובה אחרונה
                                        0
                                        • dovidD מנותק
                                          dovidD מנותק
                                          dovid ניהול
                                          כתב ב נערך לאחרונה על ידי
                                          #20

                                          שאלות יפות אחת אחת.

                                          הנקודות שאני מעוניין בהם לגבי המחשבים של הזנת הנתונים:

                                          1. שלא אצטרך כלל לטפל בנושא של מסד הנתונים (למשל התקנת תוכנת DB כלשהי)
                                          2. שהנתונים ישמרו מוצפנים באופן קריא רק על ידי התוכנה שלי
                                          1. ברור שאפשר.
                                          2. זה מסד מרכזי (דרך אינטרנט), או מקומי בכל מחשב?
                                            בכל מקרה זה רק לגבי הקשיית הדרך, כי כל מה שהתוכנה שלך יכולה לקרוא ולכתוב, אפשר בדרך קלה או פחות קלה לעשות גם בלעדיה. אין טכניקה בעולם שמונעת את זה.

                                          מה הדרך הנכונה והמומלצת לטיפול בעדכון אשכול של נתונים (graph כמו שלמדתי כאן) באמצעות טופס (wpf), כאשר אני רוצה לנצל את המעלות של ה Binding לפקדים, אבל יש כמובן לחצן ביטול שמבטל את כל השינויים בטופס הזה.
                                          האם לאגד את כל האשכול לטופס, ובביטול לטעון אותו מחדש מהמסד? אולי ליצור עותק ולעבוד עליו, ואז להשתמש בSetValues שאני עוד לא כל כך מכיר, או שיש דרך פשוטה הרבה יותר?

                                          זה שאלה גדולה ובכלל לא של מתחילים. אני מאוד התלבטתי בהז.
                                          יש לנו שתי אפשרויות בכל עריכה של ישות,
                                          א. לעבוד ישירות על הישות ששייכת לDbContext חי, ואז

                                          1. צריך לוודא שלא מבוצעת שמירה בחלונית אחרת שתשפיע גם עליו (או לעשות בידוד של DbContext פר חלון כפי שאמר @clickone או הצעה דומה )
                                          2. צריך לבצע שחזור במקרה שהלקוח ביצע ביטול ע"י הערכים המקוריים של הישות

                                          ב. לעשות עותק של הישות או לפחות לנתק אותה מהDbContext, ואז:

                                          1. בעת שמירה צריך למזג אותה חזרה לDbContex
                                          2. אין לנו אינדיקציה אם היא השתנתה או לא בלי לעקוב ממש.

                                          האפשרות השניה טובה בהרבה מנסיוני.

                                          שאלה כללית, הדרך בה עבדתי עד היום, זה ליצור מחלקה סטטית לניהול הנתונים ושאר המחלקות ניגשים אליה. האם זה נכון גם פה? או שמא כדאי לפעמים או תמיד ליצור אוביקט חדש של ה DbContext שלי?

                                          אם אתה הולך עם האפשרות השניה במקטע הקודם אתה יכול לעבוד עם DbContext אחד סטטי ולהרויח קאש וLazy Loading וכו.
                                          בכל מקרה אל תאפשר עריכות של חלקים מקושרים באותו הפעם, כי זה יסבך לך את החיים.
                                          כלומר שאם יש בחלון אחד פרטי תורם, ויש רשימת טלפונים שלו, וזה שתי טבלאות, לחצן השמור של פרטי התורם יתייחס רק לפרטים שלו כי הטלפונים יישמרו מייידית - ומבחינת הUX שבזה, צריך לעשות את בצורה של כפתור עריכה כך שתהיה תחושה של שמירה מיידית בעת הוספת טלפון או עריכתו זאת למרות שלבסוף ילחצו על ביטול בסיום העריכה.

                                          מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                                          בכל נושא אפשר ליצור קשר dovid@tchumim.com

                                          ח תגובה 1 תגובה אחרונה
                                          2

                                          • 1
                                          • 2
                                          בא תתחבר לדף היומי!
                                          • התחברות

                                          • אין לך חשבון עדיין? הרשמה

                                          • התחברו או הירשמו כדי לחפש.
                                          • פוסט ראשון
                                            פוסט אחרון
                                          0
                                          • דף הבית
                                          • קטגוריות
                                          • פוסטים אחרונים
                                          • משתמשים
                                          • חיפוש
                                          • חוקי הפורום