.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设置状态。