MVC 4即使数据库中存在该值,也返回null

时间:2014-12-07 07:12:20

标签: sql-server asp.net-mvc

我真的不知道为什么它一直返回null,即使值确实存在。我需要你的帮助 我的控制

 public ActionResult DeleteConfirmed(int id)
    {
        User user = db.Users.Find(id);
        var orders = db.Orders// 1ng co nhieu hoadon
            .Where(h => h.USERID == id).ToList();

        if (orders != null)//each order has detail order, find them and delete
        {
            foreach (Order order in orders)
            {
                var detailorders = db.DetailOrders
                    .Where(detailorder => detailorder.OrderID == order.OrderID).ToList();// Return Null here
                foreach (DetailOrder o in detailorders)
                    db.DetailOrders.Remove(o);

                db.Orders.Remove(order);
            }
        }



        db.Users.Remove(user);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

我不知道为什么detailorders返回null,帮帮我。 我的模特:

public Order()
    {
        this.DetailOrders = new HashSet<DetailOrder>();
    }

    public int OrderID { get; set; }
    public Nullable<int> USERID { get; set; }


    public virtual ICollection<DetailOrder> DetailOrders { get; set; }
    public virtual User User { get; set; }

和我的DetailOrder模型。我'使用EntiyFramework 5.0.0.0

 public partial class DetailOrder
{


    public int OrderID { get; set; } //Primary Key
    public int ProductID { get; set; }// Primary Key


    public virtual Order Order { get; set; }
    public virtual Product Product{ get; set; }

}

1 个答案:

答案 0 :(得分:0)

我在这里看不到问题,但我会建议另一条路径,以便跳过所有这些代码,而不是循环遍历订单&amp;详细订单,您只需要删除订单。

除非由于特定的设计决定而无法解决,否则可以通过在数据库中允许 CascadeDelete 来解决此问题。 这样,无论何时删除订单,数据库本身都会为您删除所有子DetailsDrder,您将在此处跳过头痛。

启用cascadeDelete的方法如下面的屏幕截图所示:

  1. 以“设计”模式打开DetailsOrder
  2. 打开“关系”
  3. 展开选项“INSERT和UPDATE规范”
  4. 为“删除规则”选项
  5. 选择“级联”
  6. 点击“确定”并保存表格
  7. enter image description here 现在,每当您删除订单时,所有相关的detailesOrders也将被删除,所有这些都由您的数据库处理。