我在Web API中創建了一個post方法來對一個表進行部分更新 - 以更改表中的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);
}
}
我通過代碼,一切步進似乎是工作 - 沒有錯誤,但數據庫不會得到更新。我究竟做錯了什麼?
更新:
設置StatusID在對象將其傳遞到Web API方法之前:
變種的ord = { 「訂單ID」 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);
}
}
兩兩件事:'Order.StatusID = 3;'大概應該是'ord.StatusID = 3',你可能需要此之後:'ctx.Entry(ORD).STATE = EntityState.Modified;' –
這是使用實體框架?我懷疑問題在於你如何調用你的ORM。請標記您的ORM,或者如果手工製作,請包含MyContext的代碼。如果直接調用方法會發生什麼? – psaxton
如果您使用的是EntityFramework,那麼您需要通知關於您正在更新的Order對象的上下文。在EF6中,您通常會在名爲Orders的上下文中擁有'DbSet'屬性,所以我建議在設置'StatusID'之前添加'ctx.Orders.Attach(Order)'。 – Rob