使用MVC Core在DbContext中更新模型

时间:2017-11-21 10:34:54

标签: c# asp.net-mvc entity-framework

我发布了我的数据,如下面的代码显示给我的控制器:

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”不存在。日志显示了我想要替换的正确数据。

2 个答案:

答案 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();
        }

也许有更好的方法。随意向我们展示替代方案: - )