0

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

问题:我可能在这里错过了什么?

注意:通过设置断点,我已经验证了,下面的控制器正确发送所选客户的记录到父视图,而且我也查了以分贝为客户在订单表中相应的订单记录。

家长:

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

当你从来没有加载顺序,它无法显示。

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

它的工作。感谢您解释错误的原因以及解决方案的必要细节。 – nam