EF-Core 相关数据加载适用于一个 child 但不适用于另一个
EF-Core Related data loading works for one child but not the other
在我的 ASP.NET Core 1.1
、EF-Core 1.1 app
中,我在具有 partial view
的 parent view
中显示数据。场景类似于以下内容:one-to-one Customers and Orders table
和 Customers and Address table
之间的关系。用户从 Parent 视图的下拉列表中选择一个客户,该视图有一个显示所选客户的相应订单的部分视图。以下控制器正确地将客户订单详细信息发送到视图。但是,如果我用地址实体替换订单实体,则传递给部分视图的模型始终为空。
问题:我在这里可能遗漏了什么?
注意:通过放置断点,我验证了下面的控制器正确地将所选客户的记录发送到 Parent 视图,并且我还在 Db 中查看该客户在地址 table 中有相应的地址记录。另一个观察结果是,即使我通过 Visual Studio 控制台删除 customer
和 order
和 address
实体之间的 FK-relationship
,然后重新创建这些关系,问题仍然存在- 即,它适用于 order
但不适用于 address
实体。我还在 Db 中验证了 FK-relationship
已为 table 正确创建。
Parent:
public class Customer
{
[Key]
public int CustomerId{ get; set; }
public string Name { get; set; }
....
....
public Order order { get; set; }
public Address address { 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; }
}
另一个Child:
public class Adress
{
[Key]
public int AdressId{ get; set; }
public string street { get; set; }
....
....
public int? CustomerId { get; set; }
public Customer customer{ get; set; }
}
控制器:
....
....
Customer mycustomer = _context.Customer.Include(c => c.order).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>
....
我认为问题是在您的控制器中,您在获取 Customer 时忘记包含地址。
所以从
Customer mycustomer = _context.Customer
.Include(c => c.order)
.Where(c => c.CustomerId == selectedId)
.SingleOrDefault();
到
Customer mycustomer = _context.Customer
.Include(c => c.order)
.Include(c => c.address)
.Where(c => c.CustomerId == selectedId)
.SingleOrDefault();
那是我的错。在地址的情况下,有人后来禁用了 FK 关系,地址 table 被孤立了。感谢那些可能试图提供帮助的人。
在我的 ASP.NET Core 1.1
、EF-Core 1.1 app
中,我在具有 partial view
的 parent view
中显示数据。场景类似于以下内容:one-to-one Customers and Orders table
和 Customers and Address table
之间的关系。用户从 Parent 视图的下拉列表中选择一个客户,该视图有一个显示所选客户的相应订单的部分视图。以下控制器正确地将客户订单详细信息发送到视图。但是,如果我用地址实体替换订单实体,则传递给部分视图的模型始终为空。
问题:我在这里可能遗漏了什么?
注意:通过放置断点,我验证了下面的控制器正确地将所选客户的记录发送到 Parent 视图,并且我还在 Db 中查看该客户在地址 table 中有相应的地址记录。另一个观察结果是,即使我通过 Visual Studio 控制台删除 customer
和 order
和 address
实体之间的 FK-relationship
,然后重新创建这些关系,问题仍然存在- 即,它适用于 order
但不适用于 address
实体。我还在 Db 中验证了 FK-relationship
已为 table 正确创建。
Parent:
public class Customer
{
[Key]
public int CustomerId{ get; set; }
public string Name { get; set; }
....
....
public Order order { get; set; }
public Address address { 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; }
}
另一个Child:
public class Adress
{
[Key]
public int AdressId{ get; set; }
public string street { get; set; }
....
....
public int? CustomerId { get; set; }
public Customer customer{ get; set; }
}
控制器:
....
....
Customer mycustomer = _context.Customer.Include(c => c.order).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>
....
我认为问题是在您的控制器中,您在获取 Customer 时忘记包含地址。
所以从
Customer mycustomer = _context.Customer
.Include(c => c.order)
.Where(c => c.CustomerId == selectedId)
.SingleOrDefault();
到
Customer mycustomer = _context.Customer
.Include(c => c.order)
.Include(c => c.address)
.Where(c => c.CustomerId == selectedId)
.SingleOrDefault();
那是我的错。在地址的情况下,有人后来禁用了 FK 关系,地址 table 被孤立了。感谢那些可能试图提供帮助的人。