【问题标题】:How to get to Foreign keys in the ADO.NET entity model?如何获取 ADO.NET 实体模型中的外键?
【发布时间】:2009-02-06 08:12:14
【问题描述】:

我有 3 个表(以及实体模型中的对应实体) 游戏: Id - 主键 ...其他列

玩家: Id - 主键 ...其他列

GamePlayer(一个玩家可以参与很多游戏) GameId --> 来自游戏的外键 PlayerId --> 来自 Player 的外键 ...其他列

在我的代码中,我可以通过其他方式获得 gameId 和 playerId。使用这个我想知道玩家(playerId)是否正在参与特定的游戏(gameId)。所以我这样做:(实体是我的上下文对象)

IQueryable 查询 = entity.GamePlayer.where(gp => ((gp.Game.Id == gameId) && (gp.Player.Id == playerId))) 如果查询返回一行,那么我知道该玩家正在参与该游戏。

我阅读了多个关于实体引用的 MSDN 博客,但我很困惑。看来 MSDN 建议我首先必须检查 IsLoaded 的 EntityReference 对象,如果未加载,我必须加载实体,然后才应该在查询中使用它。

GamePlayer 确实有 GamePlayer.GameReference 和 GamePlayer.PlayerReference,但我无法检查是否加载了引用,因为我手头没有 GamePlayer 对象。 GamePlayer 表包含两个 1...* 关系,仅此而已。我必须仅使用 GameId 和 PlayerId 查询 GamePlayer。我在这里做错了什么?

我应该改为获取玩家(或游戏)对象(使用他们的 ID)并检查 GamePlayer 实体集合吗? Sql 就是这么简单。如果这太天真了,抱歉,我很难将我的 sql 查询转换为实体查询。

【问题讨论】:

    标签: ado.net foreign-keys ado.net-entity-data-model entityreference


    【解决方案1】:

    我认为你正在做的很好。据我所知,您在 lambda 表达式中使用的任何内容都不必显式加载。

    我认为 MSDN 所指的是如果您将获得一个 GamePlayer 实体,然后访问这样的关联实体:

    GamePlayer gp = entity.GamePlayer.First( g=> g.id = 2);

    字符串游戏名称 = gp.Game.name;

    这会引发异常(您必须单独加载游戏或确保它像这样加载:entities.GamePlayer.Include("Game").First( g => g.id = 2))

    【讨论】:

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