Web API中的部分更新无效

时间:2016-11-04 21:11:59

标签: c# linq asp.net-web-api

我在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);

   }
}

2 个答案:

答案 0 :(得分:0)

如果您正在使用EntityFramework,那么您需要通知上下文您正在更新的Order对象。在EF6中,您通常会在名为DbSet的上下文中使用Orders属性,因此我建议您在设置ctx.Orders.Attach(Order)之前添加StatusID

答案 1 :(得分:0)

试试这段代码: 通过与ord.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);
       }