【问题标题】:Entity Framework 4.0 2 many-to-many with same entitiesEntity Framework 4.0 2 具有相同实体的多对多
【发布时间】:2011-12-10 22:42:08
【问题描述】:

我有 2 个实体(比如 PeopleBooks),它们有两个多对多关系。我创建了两个不同的链接表 - 例如链接表称为BooksCheckedOutByPeopleBooksOnHoldByPeople

EF 4.0 正确地建立了两个关系。它称它们为PeopleBooksPeopleBooks1

当我进行 Linq 查询时,我如何告诉 Linq 使用其中一种特定的关系? Linq 中是否有任何方法可以指定一种关系而不是另一种关系?

假设我正在创建一个针对 People 的查询,并且我想为 BooksCheckedOutByPeople 获取 Books,因此我需要使用关系 PeopleBooks

谢谢。

【问题讨论】:

    标签: entity-framework-4 linq-to-entities


    【解决方案1】:

    您应该能够通过编辑 EF 为您生成的模型将“PeopleBooks”和“PeopleBooks1”重命名为提供更多信息的属性名称。诸如“BooksOnHold”和“BooksCheckedOut”之类的东西。

    此时,在编写 LINQ 查询时,只需引用正确的导航属性(因为它们被称为)。 LINQ 使用您指定的任何属性,并且实体框架应该为每个集合生成一个唯一的导航属性。

    编辑

    我刚刚启动了 VS2010 来复制你的模型并四处寻找。

    我看到 EF4 确实为 Book 和 Person 生成了两个 导航属性,分别称为 People 和 People1,以及 Books 和 Books1。

    如果您在模型浏览器中选择任何这些导航属性并查看“属性”窗格,您应该能够看到哪个表与该关联相关并适当地重命名该属性。这是我电脑的截图:

    您可以看到我为“Book”实体选择了“People”导航属性。在这种情况下,关联由 BooksCheckedOutByPeople 确定,因此我可以将属性重命名为“PeopleCheckingOut”,或者比“People”更有用的名称。当我稍后使用 LINQ-to-Entities 时,我会引用“PeopleCheckingOut”属性来查询任何特定 Book 上的该集合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多