עדכון שורה entity
-
מוצאים את השורה המתאימה משנים ושומרים ככה:
DbContext.SaveChanges().
אם לקחו את האנטיטי מDbContext והDbContext לא קיים כבר בסקופ הנוכחי, אז כשיוצרים חדש צריך "לקשר" בחזרה את האובייקט לקונקסט, זה נראה לי, אדרבה תבדוק ותדווח.
בשביל לקשר כותבים:
DbContext.Attach(Entity)
פורסם במקור בפורום CODE613 ב06/04/2014 17:28 (+03:00)
-
זה מה שעובד לי בסופו של דבר
if (context.ID > 0) { db.Contacts.Attach(context); db.Entry(context).State = EntityState.Modified; } else { db.Contacts.Add(context); } db.SaveChanges();
תודה לכולם
אשמח אם מישהוא יוכל לתת הסבר לדרך הפעולה הזופורסם במקור בפורום CODE613 ב06/04/2014 18:25 (+03:00)
-
לפני הכל אציין שאני לא מבין למה לא עבד לך.
הקוד שהבאת מטפל במקרה כמו של דטה גריד, שיש גם שורות חדשות וגם ישנות שנערכו (לא בהכרח, וודאי שלא בהכרח כולם, כך שהוא לא לגמרי יעיל הקוד הזה, אבל הוא מביא את התוצאות הרצויות).
אופן הבדיקה שלו מתבסס על השדה המפתח שהוא AutoIncerment מה שאומר שהוא 0 באנטיטי שעוד לא היה מעולם במסד, ולאחמ"כ יש לו מספור אוטומטי.
במידה ויש מספר, ממילא המסקנה היא שמדובר בשורה קיימת, ורק צריך להגיד לDbContext שייקח אותה בחשבון (כי הDbContext שמור רק מה שהוא עצמו הביא ושינה, ואילו השורה כאן שונתה לפני שהDbContex נוצר. לכן צריך לקשר אותה לקונטקסט. גם אחרי הקישור, יש לציין לקונקסט שהיא עברה שינוי, כי לפי זה הוא מחליט אם לעדכן.אגב, לפי מה שקראתי, ההשמה למאפיין State עושה גם קישור בעקיפין כך שהשורה של הקישור מיותרת.
פורסם במקור בפורום CODE613 ב06/04/2014 18:46 (+03:00)