DbContext.SaveChanges()未更新数据库

时间:2016-01-04 21:46:42

标签: c# .net entity-framework ef-code-first

我正在尝试使用实体框架将实体保存到数据库。我有这个代码来处理对象的更新:

DbSet.Attach(entity);

之后我打电话给:

_context.SaveChanges();

(我正在使用MVC的工作单元模式)

我要添加的实体的状态为“已修改”。调用SaveChanges不会抛出异常,但返回值为0,并且DB中的行不会更新。知道为什么会这样吗?

P.S。我使用相同的上下文来检索实体,然后再保存它。

P.P.S我可以发布代码,但我不知道哪些代码是相关的,因为我不知道问题的来源。

3 个答案:

答案 0 :(得分:2)

我假设实体已作为先前查询的结果附加,或通过Add将其添加为新实体。

当您通过Attach附加实体时,状态已更改为未更改。

引自this reference

  

请注意,在某个其他状态的上下文中的实体的状态将设置为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/

得到了这个例子