Почему я получаю System.NullReferenceException: ссылка на объект не установлена ​​для экземпляра объекта?

У меня есть две модели: Order и OrderDetails. Их модели:

public class Order
    {   
        public int Id { get; set; }
        public int OrderDetailsId { get; set; }
        public string UserId { get; set; }
        public ApplicationUser User { get; set; }
        public ICollection<OrderDetail> OrderDetails { get; set; }
    }

и:

public class OrderDetail
    {
        public int Id { get; set; }
        public int OrderId { get; set; }
        public Order Order { get; set; }
        public int MenuId { get; set; }
        public Menu Menu { get; set; }
    }

И в подробном представлении заказа я хотел показать связанные OrderDetails. Подробности ActionResult:

public ActionResult Details(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Order order = db.Orders.Where(o => o.Id == id).Include(o => o.OrderDetails).SingleOrDefault();
            //Order order = db.Orders.Where(o => o.Id == id).Include(o => o.OrderDetails).G;
            if (order == null)
            {
                return HttpNotFound();
            }
            return View(order);
        }

И его мнение:

@model RestaurantApp.Models.Order

<div>
    <hr />
    <dl class="dl-horizontal">
        <dt>
            @Html.DisplayNameFor(model => model.User.Email)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.User.Email)
        </dd>
    </dl>
</div>


<table class="table">
    @if (Model.OrderDetails == null)
    {
        <tr>no items found</tr>
    }
    else
    {
        foreach (var item in Model.OrderDetails)
        {
            <tr>
                <td>@item.MenuId</td>
                <td>@item.Quantity</td>
                <td>@item.Price</td>
            </tr>
        }
    }
</table>

И проблема в том, что я хотел отобразить Menu.Name вместо MenuId. Но когда я использую Menu.Name, он показывает System.NullReferenceException: ссылка на объект не установлена ​​на экземпляр объекта. Как я могу решить эту проблему?

Всего 1 ответ


Похоже, что свойство Manu не заполняется для вашего типа OrderDetail . Глядя на действие Details , кажется, что вам не хватает загрузить ссылочные данные, подобно тому, как вы это делаете для связанной сущности OrderDetails . Попробуйте обновить свой запрос, чтобы он также Menu сущность Menu .

Я предполагаю, что это будет что-то похожее на строку ниже (хотя не уверен насчет точного синтаксиса):

.Include(o => o.OrderDetails).Include(o=>o.OrderDetails.Menu)

Есть идеи?

10000