我发布了我的数据,如下面的代码显示给我的控制器:
EmployeesController.cs
[Route("api/[controller]/update")]
[HttpPost]
public System.Net.Http.HttpResponseMessage Post([FromBody]List<Employees> list)
{
using (var context = new EmployeesDbContext())
{
foreach (var emp in list)
{
Console.Write("MyLOG: " + emp.id + " : " + emp.name + "\n");
SQLEmployeeData sqlData = new SQLEmployeeData(context);
sqlData.Update(emp);
}
}
return null;
}
我在控制器中使用更新数据库条目的方法在 SQLEmployeeData 类中定义:
public class SQLEmployeeData
{
private EmployeesDbContext _context { get; set; }
//...
public void Update(Employees emp)
{
//_context.Update(emp).Where(emp.id); // PSEUDOCODE
Console.Write("UPDATELOG: "
+ _context.Employees.FirstOrDefault(e => e.id == emp.id).id + " - "
+ _context.Employees.FirstOrDefault(e => e.id == emp.idID).name + "\n");
_context.SaveChanges();
}
//...
}
现在我想替换伪代码,因为“where”不存在。日志显示了我想要替换的正确数据。
答案 0 :(得分:0)
您可以使用Attach
方法将对象附加到实体框架并更新它将其状态设置为EntityState.Modified
,并在调用SaveChanges
后,EF将向DB发送更新查询
public void Update(Employees emp)
{
_context.Employees.Attach(emp);
_context.Entry(emp).State = EntityState.Modified;
_context.SaveChanges();
}
在这种情况下,您只能使用一个查询进行更新。 或者在您的情况下,您可以通过手动设置修改后的属性来减少发送的数据。
public void Update(Employees emp)
{
_context.Employees.Attach(emp);
_context.Entry(emp).Property(a => a.name).IsModified = true;
_context.SaveChanges();
}
答案 1 :(得分:-1)
我可以解决我的问题:
public void Update(Employees emp)
{
Employees update_emp = new Employees();
update_emp = _context.Employees.FirstOrDefault(e => e.id == emp.id);
_context.Employees.Update(update_emp);
update_emp.id = emp.id;
update_emp.name = emp.name;
_context.SaveChanges();
}
也许有更好的方法。随意向我们展示替代方案: - )