child table 的模型在部分视图中始终为 null
Model for child table is always null in the partial view
在我的 ASP.NET Core 1.1
、EF-Core 1.1 app
中,我在具有 partial view
的 parent 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();
在我的 ASP.NET Core 1.1
、EF-Core 1.1 app
中,我在具有 partial view
的 parent 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();