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