我正在尝试使用实体框架将实体保存到数据库。我有这个代码来处理对象的更新:
DbSet.Attach(entity);
之后我打电话给:
_context.SaveChanges();
(我正在使用MVC的工作单元模式)
我要添加的实体的状态为“已修改”。调用SaveChanges不会抛出异常,但返回值为0,并且DB中的行不会更新。知道为什么会这样吗?
P.S。我使用相同的上下文来检索实体,然后再保存它。
P.P.S我可以发布代码,但我不知道哪些代码是相关的,因为我不知道问题的来源。
答案 0 :(得分:2)
我假设实体已作为先前查询的结果附加,或通过Add
将其添加为新实体。
当您通过Attach
附加实体时,状态已更改为未更改。
请注意,在某个其他状态的上下文中的实体的状态将设置为Unchanged
由于对象已经在上下文中,因此您不必附加它。只需修改实体并致电SaveChanges
。
答案 1 :(得分:0)
试试这个
在控制器
中ObjEdbContext.Entry(qry).State = EntityState.Modified;
ObjEdbContext.SaveChanges();
ModelState.Clear();
此代码中的 qry
表示您更新的查询......
答案 2 :(得分:0)
请尝试这个,
Student stud = objContext.Students.Where(x => x.StudentId == model.StudentId).SingleOrDefault();
if (stud != null)
{
**objContext.Entry(stud).CurrentValues.SetValues(model);**
objContext.SaveChanges();
return RedirectToAction("Index");
}
return View(stud);
我从http://www.c-sharpcorner.com/UploadFile/tirthacs/crud-operation-using-entity-framework-code-first/
得到了这个例子