child table 的模型在部分视图中始终为 null

Model for child table is always null in the partial view

在我的 ASP.NET Core 1.1EF-Core 1.1 app 中,我在具有 partial viewparent view 中显示数据。场景类似于以下内容:one-to-many 之间的关系 Customers and Orders table。用户从 Parent 视图的下拉列表中选择一个客户,该视图有一个显示所选客户的相应订单的部分视图。但是,我总是将传递给局部视图的模型始终为空。

问题:我在这里可能遗漏了什么?

注意:通过放置断点,我验证了下面的控制器正确地将所选客户的记录发送到 Parent 视图,并且我还在Db中查到该客户在orders table.

中有对应的订单记录

Parent:

public class Customer
{
    [Key]
    public int CustomerId{ get; set; }
    public string Name { get; set; }
    ....
    ....
    public Order order { get; set; }
}

Child:

public class Order
{
    [Key]
    public int OrderId{ get; set; }
    public float Price { get; set; }
    ....
    ....
    public int? CustomerId { get; set; }
    public Customer customer{ get; set; }
}

控制器:

....
....
Customer mycustomer = _context.Customer.Where(c=> c.CustomerId== selectedId).SingleOrDefault();
....
....
return View(mycustomer);

Parent 查看:

@model MyProj.Models.Customer

....
@Html.Partial("Partial_orders", Model.order)
....

局部视图:

@model MyProj.Models.Order

....
<div>@Model.CustomerId<div>
....

当您从未加载订单时,它无法显示。

EntityFramework核心还不支持延迟加载。所以当你打电话给

Customer mycustomer = _context.Customer
   .Where(c=> c.CustomerId== selectedId).SingleOrDefault();

只有客户会加载。您必须使用 .Include 或使用 .Load

来加载它
Customer mycustomer = _context.Customer
   .Include(c => c.order) // Add this line to tell EF Core to load orders too
   .Where(c=> c.CustomerId== selectedId).SingleOrDefault();

或者:

Customer mycustomer = _context.Customer
   .Where(c=> c.CustomerId== selectedId).SingleOrDefault();

// do explicit loading async
await _context.Entry(mycustomer)
    .Reference(c => c.order)
    .LoadAsync();
// do explicit loading sync
_context.Entry(mycustomer)
    .Reference(c => c.order)
    .Load();