Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何使用EntityFramework将对象更新保存到数据库?_.net_Entity Framework_C# 4.0 - Fatal编程技术网

.net 如何使用EntityFramework将对象更新保存到数据库?

.net 如何使用EntityFramework将对象更新保存到数据库?,.net,entity-framework,c#-4.0,.net,Entity Framework,C# 4.0,我有以下情况: public void UpdateEmployee(int empId, int deptId, int level) { Employee emp = GetEmployee(empId); emp.DeptId = deptId; emp.Level = level; using (var mye = new MyEntity()) { //this is having no effect? wc.SaveChanges() } }

我有以下情况:

public void UpdateEmployee(int empId, int deptId, int level)
{
  Employee emp = GetEmployee(empId);
  emp.DeptId = deptId;
  emp.Level = level;

  using (var mye = new MyEntity())
  {
    //this is having no effect?
    wc.SaveChanges()
  }
}

我不确定如何将Employee对象更新保存回数据库。该员工确实存在于数据库中。使用块中应该包含什么?

在修改、修改和保存更改之前,您需要调用ObjectContext

附加它

public void UpdateEmployee(int empId, int deptId, int level)
{
  Employee emp = GetEmployee(empId);

  using (var dbContext = new MyDbContext())
  {
   dbContext.Employees.Attach(emp);
   emp.DeptId = deptId;
   emp.Level = level;
   //this is having no effect?
   dbContext.SaveChanges()
  }
}
也可以附加它,然后将状态设置为“已修改”:

public void UpdateEmployee(int empId, int deptId, int level)
{
  Employee emp = GetEmployee(empId);
  emp.DeptId = deptId;
  emp.Level = level;    

  using (var dbContext = new MyDbContext())
  {
   dbContext.Employees.Attach(emp);
   dbContext.Entry(emp).State = EntityState.Modified;
   dbContext.SaveChanges()
  }
}
如果您只想发送更新中的那些字段,而不是所有列:

public void UpdateEmployee(int empId, int deptId, int level)
{
  Employee emp = GetEmployee(empId);
  emp.DeptId = deptId;
  emp.Level = level;    

  using (var dbContext = new MyDbContext())
  {
   dbContext.Employees.Attach(emp);
   dbContext.Entry(emp).Property(p => p.DeptId).IsModified = true;
   dbContext.Entry(emp).Property(p => p.Level).IsModified = true;
   dbContext.SaveChanges()
  }
}

我正在调用SaveChanges()。它没有任何作用。我已经更新了OP。在调用SaveChanges之前,您需要将实体添加到dbContext。这不是在尝试插入新记录吗?抱歉,误读了您的问题,以为它说对象不存在。您的
GetEmployee
方法如何工作?你确定它返回正确的结果吗?我试试看。这里的断开连接场景有什么不同?是的。基本上,您必须让对象状态管理器确认实体在附加后被修改。您的第一个示例没有设置状态。如果使用块为实体内的对象指定属性,则不需要设置状态?如果在附加后执行更改,则由dbContext设置状态。