我已在我的控制器上创建了一个操作,目的是在有人点击“下订单”按钮时更改订单状态。这是我的代码,它不会触发错误,并且在放置断点时,我可以看到Order.Status的设置是正确的。但是,EF似乎没有将枚举值的更改保存到数据库中。如果我更改strings / int等,它可以正常工作,但不能枚举。我究竟做错了什么?
public ActionResult PlaceOrder(int id = 0)
{
Order order = db.Orders.Find(id);
if (order == null)
{
return HttpNotFound();
}
order.Status = ServerApplication.Helpers.Enums.OrderStatus.Receive;
db.Entry(order).State = EntityState.Modified;
db.SaveChanges();
return (RedirectToAction("Details", new { id = order.OrderId }));
}
这就是Order的定义方式:
public class Order
{
public int OrderId { get; set; }
public ServerApplication.Helpers.Enums.OrderStatus Status { get; set; }
...
}
最后,枚举:
public enum OrderStatus { Pending, Receive, Complete }
修改
我已经做了一些进一步的调查,而我之前的假设是,只是在编辑它时它没有改变是不正确的。在浏览数据库时,似乎没有枚举在数据库中有列。我的观点只是返回第一个值,让我觉得它们不正确时是正确的。我首先使用代码EF5,为什么使用我上面的模型是没有状态列?
答案 0 :(得分:0)
问题是因为我在一个类中声明了枚举:
namespace ServerApplication.Helpers
{
public static class Enums
{
public enum OrderStatus { Pending, Receive, Complete }
}
}
删除该类并简单地解决以下问题:
namespace ServerApplication.Helpers
{
public enum OrderStatus { Pending, Receive, Complete }
}