子视图的模型在局部视图中始终为null

时间:2017-05-28 02:19:06

标签: sql-server asp.net-core entity-framework-core foreign-key-relationship

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

问题:我在这里可能缺少什么?

注意:通过放置断点,我已经验证下面的控制器正确地将所选客户的记录发送到父视图,并且我还检查了Db该客户是否有相应的订单订单表中的记录。

父:

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

儿童:

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

家长视图

@model MyProj.Models.Customer

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

部分视图

@model MyProj.Models.Order

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

1 个答案:

答案 0 :(得分:1)

如果您从未加载订单,则无法显示。

EntityFramework Core尚不支持延迟加载。所以当你打电话时

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();