2016-11-04 6 views
1

Web APIでpostメソッドを作成して、1つのテーブルの部分的な更新 - テーブルのOrder Statusフィールドを変更しました。ここで私がこれまでに得たものである:私はコードとすべてのステップ実行していますWeb APIの部分的な更新が機能していません

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

    } 
} 

作業していないしているようだ - エラーが、データベースが更新取得されません。私は間違って何をしていますか?

更新:ウェブAPIメソッドに渡す前に、オブジェクトにStatusIDを設定

するvar ORD = { "受注":1、 "受注日":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); 

    } 
} 
+1

2つのこと: 'Order.StatusID = 3;' 'おそらくord.StatusID = 3 'のであるべきであり、あなたがそうした後、これを必要とする:;' 'ctx.Entry(ORD).State = EntityState.Modified –

+0

これはEntity Frameworkを使用していますか?私はあなたのORMをどのように呼んでいるのかという問題があると思います。あなたのORMにタグをつけてください、または手作りの場合はMyContextのコードを含めてください。メソッドを直接呼び出すとどうなりますか? – psaxton

+1

EntityFrameworkを使用している場合は、更新するOrderオブジェクトについてコンテキストに通知する必要があります。 EF6では、通常、 'Orders'というコンテキスト上に' DbSet'プロパティがあるので、 'StatusID'を設定する前に' ctx.Orders.Attach(Order) 'を追加することをお勧めします。 – Rob

答えて

0

あなたがEntityFrameworkを使用しているなら、あなたは、あなたが更新しているOrderオブジェクトに関するコンテキストに通知する必要があります。 EF6では、一般的にOrdersと呼ばれるコンテキストにDbSet性質を持っているでしょうので、あなたは、このコード試してみてくださいStatusID

0

を設定する前に、私はctx.Orders.Attach(Order)を追加お勧めする:次にStatusIDを更新し、ord.OrderIDと比較して、データベースから 取得orderEntityをそのレコードの

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); 
     } 
関連する問題