Web API的部分更新不工作
本文关键字:更新 工作 API Web | 更新日期: 2023-09-27 18:16:28
我在我的Web API中创建了一个post方法来对一个表进行部分更新——更改表中的Order Status字段。以下是我目前得到的结果:
public IHttpActionResult UpdateOrderStatus(Order ord)
{
try
{
if (!ModelState.IsValid)
{
throw new ProcessException("One or more values are invalid, please check.");
}
using (MyContext ctx = new MyContext())
{
ord.StatusID = 3;
ctx.SaveChanges();
return CreatedAtRoute("DefaultApi", new { id = ord.OrderID }, ord);
}
}
catch (Exception ex)
{
throw new ProcessException(ex.Message);
}
}
我正在通过代码和一切似乎都在工作-没有错误,但数据库没有得到更新。我做错了什么?
更新:在传递给Web API方法之前,在对象中设置StatusID:
var ord = {"OrderID": 1, "OrderDate": CurrentDate, "StatusID": 3};
public IHttpActionResult UpdateOrderStatus(Order ord)
{
try
{
if (!ModelState.IsValid)
{
throw new ProcessException("One or more values are invalid, please check.");
}
using (MyContext ctx = new MyContext())
{
ctx.Entry(ord).State = EntityState.Modified;
ctx.SaveChanges();
return CreatedAtRoute("DefaultApi", new { id = ord.OrderID }, ord);
}
}
catch (Exception ex)
{
throw new ProcessException(ex.Message);
}
}
如果您正在使用EntityFramework,那么您需要通知上下文有关您正在更新的Order对象。在EF6中,您通常会在名为Orders
的上下文中拥有DbSet
属性,因此我建议在设置StatusID
ctx.Orders.Attach(Order)
试试下面的代码:通过比较order . orderid从数据库中获取orderEntity,然后更新该记录的StatusID。
using (MyContext ctx = new MyContext())
{
var orderEntity = ctx.Order.FirstOrDefault(x=> x.OrderID == ord.OrderID);
orderEntity.StatusID = 3;
ctx.SaveChanges();
return CreatedAtRoute("DefaultApi", new { id = ord.OrderID }, ord);
}