Detach and Attach – Entity Framework

יום רביעי, מאי 11, 2011

  מצב סביר בעולם ה - web.   משתמש ביצע לוגין. הבאנו את המידע שלו בעזרת EF, (המידע שלו מכיל אובייקט - נניח קוראים לו User - שמכיל הפנייה לאובייקטים אחרים) שמרנו אותו ב - Session אבל לא שמרנו את ה - Context מכיוון שלא רצינו לשמור על connection פתוח כל הזמן.   כעת עשינו שינוי כלשהו באובייקט ונרצה לשמור אותו בבסיס הנתונים.   אם נעשה את השינוי ישירות באובייקט ששמרנו בזיכרון, לא נוכל לבצע SaveChanges על ה - context, מכייון שהאובייקט ששמרנו שייך ל - Context אחר (שכבר נעלם). אם נעשה את השינוי בבסיס הנתונים נצטרך גם לעשות את השינוי באובייקט שלנו כדי לשמור על אותו מידע.     הפיתרון שלכאורה...
תגיות: , ,
3 תגובות

is of a type that is invalid for use as a key column in an index – Entity Framework

יום רביעי, מאי 4, 2011

  במידה ואתם משתמשים בשיטת Empty Model ב - EF, והגדרתם עמודה מסוג string שתהיה Primary Key, סביר להניח שבזמן שתעשו Generate database from model תקבלו את הודעת השגיאה:       Column 'Id' in table 'Entity1Set' is of a type that is invalid for use as a key column in an index.   כדי לפתור זאת חפשו את הגדרת העמודה בסקריפט שנוצר הוא יהיה כנראה מסוג: nvarchar(max) במקום הערך max הגדירו ערך הגיוני אחר ונסו שוב להריץ את הסקריפט, כעת זה אמור לעבוד.
אין תגובות

Entity Framework include sub path in query

יום ראשון, ינואר 9, 2011

כיצד להביא בבת אחת בעזרת Entity Framework את כל האובייקטים הקשורים. (גם את תתי האובייקטים)     כידוע EF מביא את האובייקטים הקשורים לאובייקט שלנו בזמן שנצטרך אותם, וכדי לשכנע אותו בכל זאת להביא את כל האובייקטים בזמן השאילתא נצטרך להשתמש בפונקצייה Include     context.Owners.Include("Subjects").First(x => x.OwnerKey == ownerKey);     במידה ולאובייקט Subject יש גם אובייקטים שנרצה להביא אותם בזמן השאילתא הראשית - נכתוב קוד כזה     context.Owners.Include("Subjects").Include("Subjects.SubSubjects").First(x => x.OwnerKey == ownerKey);
תגיות: , ,
2 תגובות

Local query in Entity Framework

יום ראשון, מאי 16, 2010

  איך להריץ שאילתות ב - Entity Framework על ה - context ולא לרוץ לבסיס הנתונים.   (הקרדיט של הפוסט הזה שייך לאחי יוסי גולדברג)   בעייה: כלל ידוע ב - Entity Framework שכל הפעלה של פונקצייה מתבצעת בבסיס הנתונים. יכול להיות שזה טוב ויכול להיות שלא, אבל זה מביא אותנו לבעייה הבאה.   נניח שאנחנו נותנים למשתמש את היכולת להוסיף מידע באמצעות Entity Framework אבל אנחנו לא עושים SaveChanges בכל פעם שהמשתמש מוסיף שורה וכתוצאה מכך בפעם הבאה שננסה להביא את הנתונים (נניח לקשר אותו לגריד) המשתמש לא יראה את השורה שהוא הוסיף ברגע זה.   פיתרון: כשיש שאלות ב - Entity Framework פונים כמובן או לגיל או לעידו, התמזל...
תגיות: ,
2 תגובות

Delete object in Entity Framework

יום שבת, אפריל 24, 2010

  אם תנסו למחוק אובייקט ב - collection ב - entity framework בעזרת remove בצורה הבאה   Lecture lecture = entities.Lectures.Include("SelaRelatedCourses").First(); lecture.SelaRelatedCourses.Remove(lecture.SelaRelatedCourses.ElementAt(0));   אתם יכולים לקבל הודעת שגיאה בהסגנון הזה   A relationship is being added or deleted from an AssociationSet 'FK_Relatedcourses_Lecture'. With cardinality constraints, a corresponding 'SelaRelatedCourses' must also be added or deleted.     כדי למחוק בצורה נכונה עדיף לכתוב ככה   entities.DeleteObject(lecture.SelaRelatedCourses.ElementAt(0));
תגיות: ,
אין תגובות

Unable to update the EntitySet '[TableName]' because it has a DefiningQuery and no <InsertFunction> element exists in the <ModificationFunctionMapping> element to support the current operation

יום שישי, אפריל 23, 2010

  היה לי בבסיס הנתונים קישור פשוט של רבים לרבים     מבחינת האובייקטים ב - Entity Framework זה נוצר בצורה הזאת       הקשר בין הרצאה לתגים הוא רבים לרבים. כשניסיתי לכתוב את הקוד הזה     Lecture lecture = entities.Lectures.First(); Tag tag = new Tag() { Name = "acbd" }; lecture.Tags.Add(tag);   entities.SaveChanges();   קבלתי את ההודעה הבאה     Unable to update the EntitySet 'TagLecture' because it has a DefiningQuery and no <InsertFunction> element exists in the <ModificationFunctionMapping> element to support the current operation     התחלתי לחקור את הנושא ופתחתי את קובץ ה - xml שה - EF מייצר.   וראיתי את ההודעה הבאה    <!--Errors Found During Generation:      warning 6002: The table/view 'SCO.dbo.TagLecture' does not have a primary key...
3 תגובות

Entity Framework – Part 5

יום שלישי, נובמבר 17, 2009

  אז בפרק האחרון דברנו על מה ה - designer עושה מאחורי הקלעים עבור הסכמה שלנו, אפשר להאריך בנושא הסכמה עוד הרבה, אבל חשבתי שכדאי קצת לראות קוד ואיך לעבוד עם ה - EF ואחרי זה נסבך קצת את הסכמה.   היות שבסיס הנתונים שלנו כרגע ריק - אנחנו נכתוב קוד שיכניס בו נתונים ונדון בכמה נושאים.   כדי לעבוד עם EF אנחנו חייבים לייצר מופע של מחלקה שיורשת מ - ObjectContext במקרה שלנו EFLabEntities,   using (EFLabEntities context = new EFLabEntities()){  }   במקרה שלנו יהיה חכם לעשות את זה עם using כי אנחנו רוצים לייצר את ה - context להוסיף לו אובייקטים לשמור לבסיס הנתונים, וזהו. בחיים האמיתיים יתכן...
תגיות: , , ,
9 תגובות

Entity Framework – Part 4

יום רביעי, נובמבר 4, 2009

  בפרק הקודם ראינו את ה - xml שנוצר מאחורי הקלעים והבנו מה המשמעות של האלמנטים ואיך הוא מקשר בין המבנה של בסיס הנתונים לבין מבנה האובייקטים.   בפרק הנוכחי נראה את הקוד שמתחולל כתוצאה מהמודל.   תזכורת: יש לנו ישות אחת שנראת כך:   כשפתחנו את קובץ ה - edmx ב - xml editor ראינו שהוא למעשה קובץ xml. לקובץ הזה יש קובץ נוסף שנקרא Model.Designer.cs - כשנפתח אותו נראה הרבה קוד - ונסביר אותו.   החלק הראשון הוא מחלקה שיורשת מ - ObjectContext   public partial class EFLabEntities : ObjectContext {     public EFLabEntities() :             base("name=EFLabEntities", "EFLabEntities")     {         this.OnContextCreated();     }       partial void OnContextCreated();       public ObjectQuery<User> Users     {        ...
תגיות: , , ,
3 תגובות

Entity Framework – Part 3

יום חמישי, אוקטובר 29, 2009

  בפרק הקודם הגענו למצב שיש לנו טבלה אחת שממופה לטבלה כהמאפיין InternalGender הוגדר כ - private והוספנו partial class כדי לחשוף אותו כ - enum   public enum UserGender {     Male,     Female }   public partial class User {     public UserGender Gender     {         get         {             return (UserGender)this.InternalGender;         }         set         {             InternalGender = (int)value;         }     } }     נפתח את המודל בעזרת XmlEditor             מומלץ לסדר את ה - xml על ידי לחיצה על Format the whole document. (צירוף המקשים Ctrl+e+d)   לאחר מכן נלחץ קליק ימין בעכבר ונבחר ב - Outlining ואז ב- Toggle all outlining         כעת כל ה - xml יהיה מכווץ, נרחיב את...
תגיות: , , ,
אין תגובות

Entity Framework – part 2

יום ראשון, אוקטובר 25, 2009

  נמשיך בלימוד על Entity Framework.   בפרק הזה נייצר את הישות הראשונה שלנו כמובן שנעשה זאת ידני - לאחר שנבין את הקוד וה - xml שנוצרים נוכל לייבא את שאר הטבלאות שלנו בצורה אוטומטית ורק לשנות את מה שצריך, במקום לייצר ידנית את הישויות.   בפרק הקודם אמרתי שנדגים את העבודה מול northwind - בסופו של דבר אני חושב שאני מעדיף לייצר DB כלשהו שדרכו אוכל לשקף את התובנות שלי על EF, ולא להשתמש ב - DB קיים שאני צריך לכתוב את הישויות לפי המבנה שלו.   נחזור בקצרה על התהליך שעשינו בפרק הקודם. תוכלו להוריד את ה - DB עבור הפרק הנוכחי מכאן. או את...
תגיות: , , ,
4 תגובות