Vb.net 查询多对多关系

Vb.net 查询多对多关系,vb.net,entity-framework,Vb.net,Entity Framework,我需要解决问题的每一篇文章似乎都是用C语言写的,我需要用VB.NET来解决 我使用EF6.0和数据库优先模型。让我用经典的客户产品场景来演示我的情况。在我的数据库中,我有三个表Customer、Product和CustomerProduct。在这个链接中看到的和我的完全一样 从数据库生成模型后,实体模型图显示CustomerProduct已按预期消失,模型显示了客户和产品之间的多对多关系,以及客户中产品和产品中客户的导航属性 我要做的就是找到与客户相关的产品,从两个表(即CustName和Pro

我需要解决问题的每一篇文章似乎都是用C语言写的,我需要用VB.NET来解决

我使用EF6.0和数据库优先模型。让我用经典的客户产品场景来演示我的情况。在我的数据库中,我有三个表Customer、Product和CustomerProduct。在这个链接中看到的和我的完全一样

从数据库生成模型后,实体模型图显示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

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

您可以将它们包括在内,然后通过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

多亏了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

我一直坚持的一点是必须对产品数据进行两次过滤。我不确定是否有更简单的方法可以做到这一点,但目前它仍然有效。

感谢您的快速响应,但不幸的是,这不起作用。我收到错误“EntityType'model.User'未声明名为'UserAddressLink'的导航属性”。我不确定如何链接UserAddressLink实体,因为它不存在。它在我创建模型时消失了,我只有两个导航属性:用户中的地址和地址中的用户。您必须在数据库中设置关系,然后基于DB导入模型,然后您将在模型中看到导航属性。您还可以使用Lambdas和强类型Includes,如果导入System.Data.Entity命名空间,例如
model.User.Include(Function(U)U.Address).ToList
。但正如@AlastairW所指出的,您必须首先使用数据库关系更新您的模型(假设您已经构建了后者)。我已经完全重新编辑了描述,以便更清楚地了解我试图实现的目标,我找到了一个链接,该链接准确地显示了我的设置。我的数据库关系正是我想要的,一切都在做它应该做的事情。链接应该会消失,我应该能够使用导航属性来获取我需要的数据,而不必包含链接表。谢谢@InteXX我最终通过您的解决方案解决了这个问题。我现在就发布答案。