首页 > 解决方案 > 如何在另一个模型的控制器操作中初始化一个模型?

问题描述

我在 Asp.net MVC 中创建了一个网络应用程序,它有一个订单操作。我有这两种型号的订单

 public class Order
    {
        public int Id { get; set; }
        public DateTimeOffset OrderTime { get; set; }
        [InverseProperty("Order")]
        public ICollection<OrderDetail> OrderDetails { get; set; }
    }

对于 OrderDetail

public class OrderDetail
    {
        public int Id { get; set; }
        public int OrderId { get; set; }
        public ICollection<Order> Order { get; set; }
        public int MenuId { get; set; }
        public int RestaurantId { get; set; }
        public Menu Menu { get; set; }
        public decimal Price { get; set; }
        public int Quantity { get; set; }
    }

我为他们创建了表格。我还为 Order 创建了一个控制器。它包含索引和详细信息操作。索引操作显示订单列表,每个订单都有自己的 Detail 链接,其中应包含 Order 和相关 OrderDetail 的信息

public ActionResult Details(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Order order = db.Orders.Find(id);
            if (order == null)
            {
                return HttpNotFound();
            }
            return View(order);
        }

问题是 OrderDetails 为空。你能建议我如何在 Details 操作中初始化 OrderDetail 吗?

标签: asp.netasp.net-mvcmodel-view-controllerview

解决方案


您必须告诉 EntityFramework 您要包含哪些导航属性。

Order order = db.Orders
    .Where( o => o.Id == id )
    .Include( o => o.OrderDetails )
    .SingleOrDefault();

但是你不能再使用 Find 方法了


推荐阅读