Как я могу инициализировать одну модель в действии контроллера другой модели? - PullRequest
2 голосов
/ 17 марта 2020

Я создал веб-приложение в Asp. net MVC, и у него есть действие заказа. У меня есть эти две модели для Order

 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; }
    }

И я создал таблицы для них. Также я создал контроллер для заказа. Содержит действия Index и Details. Индексное действие показывает список заказов, и у каждого заказа есть своя собственная ссылка Подробно, которая должна содержать информацию о Заказе и связанной с ним 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 имеет значение null. Можете ли вы предложить мне, как я могу инициализировать действие OrderDetail in Details?

1 Ответ

1 голос
/ 17 марта 2020

Вы должны указать EntityFramework, какие свойства навигации вы хотите включить.

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

Но вы больше не можете использовать метод Find

...