gpt4 book ai didi

c# - EF 中多对多连接的最佳实践

转载 作者:太空宇宙 更新时间:2023-11-03 20:26:58 24 4
gpt4 key购买 nike

Entity Framework 中多对多连接的最佳解决方案是什么。在将表添加到 edmx 文件后我们使用 EF 的一个项目中,它似乎忽略了添加交集实体,即:

有了这些表

Customer(CustomerId,...)
CustomerOrder(CustomerId,OrderId)
Order(OrderId,...)

CustomerOrder 表未添加到 edmx,因此无法使用常规(常规意思是我们过去在 LINQ to SQL 中使用的方式)内部连接查询连接这些表,例如

var q = from c in db.Customers
join co in db.CustomerOrders on c.CustomerId equals co.CustomerId
join o in db.Orders on co.OrderId equals o.OrderId
select a;

我通过查看之前提出的问题了解到,您可以通过在 where 子句中指定条件或使用 intersects 关键字来进行多项选择和“加入”。但我想知道在这种情况下最佳做法是什么。

假设我想了解客户有哪些订单,我将如何编写该查询。

最佳答案

澄清一下,当添加两个表时,连接表不是 edmx 的一部分,除非它包含的不仅仅是连接表 ID。在 EF 决定不将连接表用作实体的情况下,其他每个表应该具有导航属性(Orders 将具有 ICollection<Customer> CustomersCustomers 将具有 ICollection<Orders>)这允许访问连接表而无需手动连接它们。在这种情况下,您可以执行以下操作:

var customer = dbContext.Customers.Include("Orders")
.Where(o => o.Orders.OrderID == 2);

通常,导航属性是延迟加载的,其中对象在被代码访问之前不在实体的属性中。如果您知道您将使用 Include 方法使用它们,您可以手动告诉框架立即加载它们。此示例中的此方法不是访问 Orders.OrderID 值所必需的。

关于c# - EF 中多对多连接的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10100362/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com