ورود

View Full Version : مشکل با Update در Code First



ahmad156
سه شنبه 09 خرداد 1391, 19:07 عصر
دوستان عزیز چرا Update زیر انجام نمیشه

public Int32 UpdateManager(Manager newOp,int ID)
{
using (Context db = new Context())
{
Manager oldOp = db.Managers.Where(i => i.ID == ID).First();
oldOp = newOp;
return db.SaveChanges();
}
}

چند جا در مورد Detach و Attach کردن خوندم ولی نمیدونم چه جوری پیاده سازی میشه.
ممنون

amir-yeketaz
سه شنبه 09 خرداد 1391, 20:00 عصر
بفرمایین :

public Int32 UpdateManager(Manager newOp, int ID)
{

using (Context db = new Context())
{

db.Managers.Attach(newOp);
Context.Entry(newOp).State = System.Data.EntityState.Modified;
return db.SaveChanges();
}
}

اول موجودیت مربوطه رو به context اضافه میکنین (Attach) ، سپس وضعیت اون رو به Modified تغییر میدین و موقعی که SaveChanges انجام میشه لیست موجودیت های مارک گذاری شده با وضعیت Modified در دیتابیس به روز خواهند شد.

در ضمن در این حالت نیازی به Id نخواهد بود و همه چیز به صورت اتوماتیک تشخیص داده خواهد شد.

موفق باشید ...

ahmad156
سه شنبه 09 خرداد 1391, 21:06 عصر
دوست عزیز الان خطای زیر رو میده

Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. Refresh ObjectStateManager entries

amir-yeketaz
سه شنبه 09 خرداد 1391, 21:38 عصر
دوست عزیز الان خطای زیر رو میده

Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. Refresh ObjectStateManager entries


کد من مشکلی نداره!(کاملا تست شدس و به صورت جنریک استفاده میکنم!) ... مشکل از جایه دیگس :متفکر: ... الان احتمال این هست که موجودیتی که بهش میدین تو context نیست!

ahmad156
چهارشنبه 10 خرداد 1391, 16:46 عصر
دوست عزیز جایی دیدم که گفته بود که اگر به جای db.SaveChanges عبارت زیر رو بنویسم ولی تابع Refresh رو نمیشناسه

try
{
db.SaveChanges();

}
catch
{
db.Refresh(RefreshMode.ClientWins, db.Managers);
db.SaveChanges();
}

کل کد ویرایشم هم به شکل زیر هست.

using (Context db = new Context())
{
db.Managers.Attach(newOp);
db.Entry(newOp).State = System.Data.EntityState.Modified;
try
{
db.SaveChanges();
}
catch
{
db.Refresh(RefreshMode.ClientWins, db.Managers);
db.SaveChanges();
}
}

ahmad156
پنج شنبه 11 خرداد 1391, 10:09 صبح
دوستان عزیز پیدا کردم شاید کسی روزی بهش نیاز پیدا کنه

using (Context db = new Context())
{
var oldop = db.Managers.Find(newOp.ID);
db.Entry(oldop).CurrentValues.SetValues(newOp);
return db.SaveChanges();
}