查询多对多的关系

时间:2014-07-31 23:12:32

标签: vb.net entity-framework

我需要解决问题的每篇文章都在C#中,我需要一个VB.NET解决方案。

我使用EF 6.0和Database First模型。让我使用经典的客户产品方案来演示我的情况。在我的数据库中,我有三个表Customer,Product和CustomerProduct。请参阅此链接中的this example,因为我的情况完全相同。

从数据库生成模型后,我的实体模型图显示CustomerProduct已按预期消失,模型显示客户和产品之间的多对多关系,也与客户和客户中的产品的导航属性一样在产品中。

我想要做的就是找到与客户相关的产品从两个表中提取一些数据,即CustName和ProductName。

我将使用的SQL是:

SELECT c.CustName, p.ProductName FROM Customer c
INNER JOIN CustomerProduct cp on c.CustomerId = cp.CustomerId
INNER JOIN Product p on cp.ProductId = p.ProductId
WHERE c.CustomerId=101

我不知道如何使用地址导航属性在一个查询中访问地址数据。

2 个答案:

答案 0 :(得分:0)

您包含它们,然后通过Entity类中的属性访问它们。

Dim query = model.User.Include("Address").Include("UserAddressLink").Where(Function(o) o.UserId = 101).FirstOrDefault

If Not query Is Nothing Then
 Dim houseNumber = query.Address.HouseNo 'uses the navigation property
End If

答案 1 :(得分:0)

感谢InteXX,我设法解决了这个问题。这是我的整个解决方案

Using db as new CustProdEntities

Dim query = db.Customers.Include(Function(U) U.Products).ToList
txtCustomer.Text = query.First.CustName
txtProduct.Text query.First.Products.First.ProdName

End Using

我坚持的位是必须过滤两次产品数据。我不确定是否有更简单的方法可以做到这一点,但它现在有效。