1

我花了好几个小时试图找到这个问题的答案,结果却一无所获。

我对 .NET 和 MVC 完全陌生——我完成了 MvcMusicStore 教程,现在开始研究一个更复杂但类似的项目。我这样说只是为了说明我在这方面的经验和知识水平较低,希望任何回应都能够体谅这一点。

无论如何,我遇到的问题是我有一个表“Fixtures”,它有两个属性“TeamId1”和“TeamId2”,它们都映射到另一个表“Team”。

我想要的是每个夹具还包括 Team1 和 Team2 的团队数据。到目前为止,我一直在使用 ObjectQuery 的 Include 方法来执行类似的操作,没有任何问题。

但是,我发现 .NET 或 MVC 或实体框架或其他任何东西在我这样做时并不高兴。经过大量实验,我认为它仅在外键与其所指的表具有相同名称时才有效。基本上我的属性必须具有名称“TeamId”,否则它将不起作用。如果我没有另一个必须映射到该表的属性,这将不是问题。我显然不能在一个表中有两个同名的属性。所以我被困住了。

我只能假设可以使用“TeamId”以外的属性名称映射到表,但我找不到任何说明/以前的帖子/文档来解释如何执行此操作。

我已经考虑过分解我的夹具数据并拥有一个夹具表然后是一个单独的表来保存团队 ID、分数等的可能性,但是这似乎有点矫枉过正,因为每个夹具永远不会有两个以上的团队。所以我称之为B计划。

如果可能的话,我宁愿不回避这个问题——因为使用 EF 和 ObjectQuery 似乎并非不合理。我也知道我可以手动创建查询,指定连接。不幸的是,我对 LINQ 的经验是有限的,到目前为止,我每次尝试时都无法在一张表上进行多个联接。

所以我真正需要知道的是,是否有一些设置或代码可以用来实现上述目标,而无需求助于 LINQ 或重组我的 Fixtures 表。

编辑: 相关机型截图

此图显示了相关模型。就目前而言:这可行,但是查询显然只返回一个链接到“TeamId1”列的团队实例。注释代码显示了我在模型中还需要具备的内容(就我之前有限的经验而言)。这样我的模型就拥有两个独立的团队,它们链接到两个独立的列。

4

1 回答 1

1

我认为您正在寻找的是一些自定义映射,而不是框架提供的“按约定”映射。

如果您装饰并为您的 Fixture 添加一些属性,它应该可以正常工作。

像这样:

public int TeamId1 { get; set; }
public int TeamId2 { get; set; }

[ForeignKey("TeamId1")]
public Team Team1 { get; set; }

[ForeignKey("TeamId2")]
public Team Team2 { get; set; }
于 2011-04-19T16:41:49.907 回答