DCSIMG
Detach and Attach - Entity Framework - שלמה גולדברג (הרב דוטנט)

שלמה גולדברג (הרב דוטנט)

מרצה בסלע ויועץ בעולם ה - net.

Detach and Attach - Entity Framework

 

מצב סביר בעולם ה - web.
 
משתמש ביצע לוגין.
הבאנו את המידע שלו בעזרת EF, (המידע שלו מכיל אובייקט - נניח קוראים לו User - שמכיל הפנייה לאובייקטים אחרים)
שמרנו אותו ב - Session אבל לא שמרנו את ה - Context מכיוון שלא רצינו לשמור על connection פתוח כל הזמן.
 
כעת עשינו שינוי כלשהו באובייקט ונרצה לשמור אותו בבסיס הנתונים.
 
אם נעשה את השינוי ישירות באובייקט ששמרנו בזיכרון, לא נוכל לבצע SaveChanges על ה - context, מכייון שהאובייקט ששמרנו שייך ל - Context אחר (שכבר נעלם).
אם נעשה את השינוי בבסיס הנתונים נצטרך גם לעשות את השינוי באובייקט שלנו כדי לשמור על אותו מידע.
 
 
הפיתרון שלכאורה אמור לפתור את הבעייה, הוא לבצע פעולת Detach על האובייקט User לפני ששומרים אותו בזיכרון, לבצע את השינויים בו, ולבצע פעולת Attach כדי להחזיר אותו ל - Context, ולאחר השמירה שוב לבצע Detach.
 
הבעייה עם זה היא ש - Detach מנתק את הקשר בין User לבין שאר האובייקטים שקשורים אליו.
 
 
לאחר התייעצות עם עידו פלטו וגיל פינק, עשיתי את הדבר הבא:
 
ביצוע פעולת סריאליזציה על האובייקט User (השתמשתי בפיתרון מהפוסט הראשון שלי).
שמרתי אותו בזיכרון.
לפני ביצוע השינוי בצעתי פעולת Attach.
עשיתי את השינוי ישירות על האובייקט.
SaveChanges.
ושוב סריאליזציה כדי לנתק אותו מה - Context.
 
 
הפיתרון עובד ודי משביע רצון.
פורסם: May 11 2011, 02:43 PM by Shlomo | with 2 comment(s)

תוכן התגובה

רון קליין כתב/ה:

הי שלמה,

פוסט מעניין. רציתי לדעת אם תוכל אולי להמחיש גם ע"י קוד (גם אם חלקי).

תודה!

--רון

# May 17, 2011 1:34 PM

Dovi Perla כתב/ה:

תודה שלמה הפוסט עזר לי

# December 26, 2011 3:16 PM
שלח תגובה

(שדה חובה)  

(שדה חובה)  

(אופציונלי)

(שדה חובה) 

Please add 2 and 5 and type the answer here:


Enter the numbers above: