【发布时间】:2021-05-10 13:10:42
【问题描述】:
我正在用 C# (ASP.NET Core API) 开发数据库表。两个表具有一对多关系(一个Order 有多个ToBeOrdered)。信息:这些只是两个表,不是全部。
问题是,当我尝试创建一个必须包含来自ToBeOrdered 表的一个或多个元素的Order 元素时,程序实际上会创建许多Orders,每个都包含一个ToBeOrdered 元素而不是列表.
Order模特:
[Key]
public string Id { get; set; }
public string SupplierId { get; set; }
public Supplier Supplier { get; set; }
public List<ToBeOrdered> ToBeOrdered { get; set; }
ToBeOrdere模特:
[Key]
public string Id { get; set; }
[Required]
public int Quantity { get; set; }
public string ProductId { get; set; }
public Product Product { get; set; }
public string ProjectId { get; set; }
public Project Project { get; set; }
public string OrderId { get; set; }
public Order Order { get; set; }
查询:
public IEnumerable<Order> CreateOrder(string supplierId)
{
IEnumerable<Order> result =
from tbo in _context.ToBeOrdered
join p in _context.Products
on tbo.ProductId equals p.Id
where p.SupplierId == supplierId
select new Order
{
SupplierId = supplierId,
ToBeOrdered = new List<ToBeOrdered> {tbo}
};
return result;
}
Order 模型结果例如:
[
{
"id": "7deeb60b-e9b4-4925-ac39-7dd983df5f24",
"supplierId": "c76e873d-6bcd-4f97-bacc-a7c55b813d06",
"supplier": null,
"toBeOrdered": [
{
"id": "1",
"quantity": 10,
"productId": "bb4f5a16-1d6e-483c-89f5-7d16ba357691",
"product": null,
"projectId": "068e61cf-50b6-4669-9709-cd279b26ecf3",
"project": null,
"orderId": null,
"order": null
}
]
},
{
"id": "a186887c-6009-4e18-a81a-5b40f8f0ba06",
"supplierId": "c76e873d-6bcd-4f97-bacc-a7c55b813d06",
"supplier": null,
"toBeOrdered": [
{
"id": "2",
"quantity": 20,
"productId": "bb4f5a16-1d6e-483c-89f5-7d16ba357691",
"product": null,
"projectId": "068e61cf-50b6-4669-9709-cd279b26ecf3",
"project": null,
"orderId": null,
"order": null
}
]
}
]
结果中应该只有一个Order 和两个ToBeOrdered 模型在列表中。
我应该在 LINQ 查询中进行哪些更改?
【问题讨论】:
-
ToBeOrdered = tbo.Order.ToBeOrdered? -
没有。不幸的是,它并不好。
-
是否启用了延迟加载?如果是,则将您的列表标记为虚拟。公共虚拟列表
ToBeOrdered { get;放; } 并忘记加入。只需从数据库加载您的订单。 ToBeOrdered 将相应地填充。不要忘记添加 [foreignkey] 属性。 -
为什么不在模型/数据库中建立关系,然后只需要查询顶层?
标签: asp.net linq asp.net-core-webapi