【问题标题】:DbContext.SaveChanges() is not updating the databaseDbContext.SaveChanges() 没有更新数据库
【发布时间】:2016-01-04 21:46:42
【问题描述】:

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

DbSet.Attach(entity);

然后我打电话给:

_context.SaveChanges();

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

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

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

P.P.S 我可以发布代码,但我不知道哪个代码是相关的,因为我不知道问题出在哪里。

【问题讨论】:

  • 附加实体之后是否改变了它的状态?
  • 根据docs,DbSet.Attach 将状态重置为Unchanged
  • 如果您从同一上下文中获取实体,它将被跟踪 - 无需附加。 msdn.microsoft.com/en-us/data/jj592676.aspx
  • @YacoubMassad 不,我最后调用的是 _context.SaveChanges
  • 可以附加,修改状态,然后保存更改吗?

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


【解决方案1】:

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

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

引用this reference:

请注意,已经在上下文中处于其他状态的实体将其状态设置为未更改

由于对象已经在上下文中,您不必附加它。只需修改实体并调用SaveChanges

【讨论】:

    【解决方案2】:

    试试这个

    在控制器中

    ObjEdbContext.Entry(qry).State = EntityState.Modified;
    ObjEdbContext.SaveChanges();
    ModelState.Clear();
    

    在此代码中qry 表示您更新后的查询......

    【讨论】:

      【解决方案3】:

      请试试这个,

      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/得到这个例子

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多