2

我有3个表(和相应的实体在实体模型) 游戏: 标识 - primay关键 ...等栏目如何获取ADO.NET实体模型中的外键?

球员: 标识 - 主键 ...等栏目

的游戏玩家(玩家可以参加多场比赛) 游戏ID - >国外从游戏 PlayerId键 - >国外从玩家 键...等栏目

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

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

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

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

我应该改为使用Player(或Game)对象(使用它们的Id)并检查GamePlayer实体集合吗? Sql非常简单。如果这太天真了,对不起,我很难将我的sql查询翻译成实体查询。

回答

1

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

我觉得MSDN指的是,如果你会得到一个的游戏玩家的实体,然后访问相关的实体,像这样:

的游戏玩家金币= entities.GamePlayer.First(G => g.id = 2) ;

string gameName = gp.Game.name;首先(g => g.id = 2)这会抛出一个异常(你必须单独加载游戏或确保它是这样加载的:entities.GamePlayer.Include(“Game”)。First(g => g.id = 2) )