2

我有 3 个表(以及实体模型中的相应实体) Game: Id - primay key ... 其他列

Player: Id - 主键 ... 其他列

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

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

IQueryable query = 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 查询转换为实体查询。

4

1 回答 1

1

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

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

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

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

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

于 2009-02-06T00:12:14.590 回答