【问题标题】:Linking separate attributes to the same table in Entity Framework / .NET MVC将单独的属性链接到 Entity Framework / .NET MVC 中的同一个表
【发布时间】:2011-08-08 06:50:39
【问题描述】:

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

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

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

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

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

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

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

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

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

编辑:

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

【问题讨论】:

  • 你能贴一张你的模型的截图吗?

标签: asp.net-mvc entity-framework objectquery


【解决方案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; }

【讨论】:

  • 谢谢!这正是我需要的!
猜你喜欢
  • 2019-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-12
  • 1970-01-01
  • 2017-08-17
  • 2015-03-14
相关资源
最近更新 更多