实体框架在更新记录时抛出错误

时间:2012-05-17 17:29:42

标签: asp.net-mvc-3 entity-framework-4.1

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.

我收到此错误,但我是唯一使用该数据库的人。我正在使用Entity Framework 4.1和DBContext。

我正在更新我的记录,而SQL Profiler正在显示正在发送的队列。这个问题可能是什么原因?

帖子:

  [HttpPost]
  public ActionResult EditUser(User user)
  {                 
       uow.UserRepository.Update(user);
       uow.Save();
       return RedirectToAction("Index", "User");

  }

在此电话会议上:

  public void Save()
  {
        _context.SaveChanges();
  }

这就是它的附件

  public virtual void Update(TEntity entityToUpdate)
  {
         dbSet.Attach(entityToUpdate);
        context.Entry(entityToUpdate).State = EntityState.Modified;
  }

更新

public class UnitOfWork : IDisposable
{
    private StudentSchedulingEntities _context = new StudentSchedulingEntities();
    private GenericRepository<User> userRepository;
    private GenericRepository<UserRole> userRoleRepository;
    private bool disposed = false;

    public GenericRepository<User> UserRepository
    {
        get
        {

            if (this.userRepository == null)
            {
                this.userRepository = new GenericRepository<User>(_context);
            }
            return userRepository;
        }
    }
    public GenericRepository<UserRole> UserRoleRepository
    {
        get
        {

            if (this.userRoleRepository == null)
            {
                this.userRoleRepository = new GenericRepository<UserRole>(_context);
            }
            return userRoleRepository;
        }
    }

    public void Save()
    {
        _context.SaveChanges();
    }
    protected virtual void Dispose(bool disposing)
    {
        if (!this.disposed)
        {
            if (disposing)
            {
                _context.Dispose();
            }
        }
        this.disposed = true;
    }
    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }
}

1 个答案:

答案 0 :(得分:0)

ID字段必须在那里才能正确更新信息。否则,它将抛出一个null。 (我忘了把隐藏的字段放入ID中)

相关问题