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

播放器: Id - 主键 ......其他专栏

GamePlayer(玩家可以参加很多游戏) GameId - >来自Game的外键 PlayerId - >来自玩家的外键 ......其他专栏

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

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

有帮助吗?

解决方案

我认为你所做的很好。据我所知,无论你在lambda表达式中使用什么,都不必明确加载。

我认为MSDN所指的是你是否会获得一个GamePlayer实体,然后访问这样的相关实体:

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

string gameName = gp.Game.name;

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top