在我的ASP.NET Core 1.1
,EF-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>
....
答案 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();