更改为未保存到数据库的enum

本文关键字:数据库 enum 保存 | 更新日期: 2023-09-27 18:06:33

我在控制器上创建了一个操作,目的是在有人点击'下订单'按钮时改变订单状态。这是我的代码,它没有触发错误,并且当放置断点时,我可以看到Order。状态设置正确。然而,EF似乎并没有将枚举值的变化保存到数据库中。如果我改变字符串/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; }
    ...
}

最后是enum:

    public enum OrderStatus { Pending, Receive, Complete }

编辑

我做了一些进一步的调查,我之前的假设是,只是在编辑它们时它没有改变,这是不正确的。在探索数据库时,似乎没有一个枚举在数据库中有列。我的视图只是返回第一个值,使我认为它们是正确的,而实际上它们是错误的。我首先使用EF5代码,为什么使用我的模型上面没有一个列的状态?

更改为未保存到数据库的enum

问题是因为我在类中声明enum:

namespace ServerApplication.Helpers
{
    public static class Enums
    {
        public enum OrderStatus { Pending, Receive, Complete }
    }
}

删除类并简单地使用以下代码修复问题:

namespace ServerApplication.Helpers
{
    public enum OrderStatus { Pending, Receive, Complete }
}