【问题标题】:Model for child table is always null in the partial view子表的模型在局部视图中始终为空
【发布时间】:2017-10-28 15:01:36
【问题描述】:

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

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

注意:通过放置断点,我已经验证了下面的控制器正在正确地将所选客户的记录发送到父视图,并且我还在 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>
....

【问题讨论】:

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


    【解决方案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();
    

    【讨论】:

    • 成功了。感谢您解释错误原因和解决方案的必要细节。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 2017-07-11
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多