我有3个表(以及实体模型中对应的实体) Game: Id - primay key ...其他栏目
玩家: Id -主键...其他栏目
GamePlayer (一个玩家可以参与多个游戏) GameId -->来自游戏PlayerId的外键-->来自玩家的外键...其他栏目
在我的代码中,我可以通过其他方式使用gameId和playerId。使用这一点,我想知道玩家(playerId)是否参与了特定的游戏(gameId)。所以我这样做:(entities是我的上下文对象)
IQueryable query = entities.GamePlayer.where(gp => ((gp.Game.Id == gameId) && (gp.Player.Id == playerId)如果查询返回一行,则我知道该玩家正在参与该游戏。
我读了很多关于实体引用的MSDN博客,我很困惑。看起来MSDN建议我首先检查EntityReference对象中的IsLoaded,如果没有加载,我必须加载实体,然后才应该在查询中使用它。
GamePlayer确实有GamePlayer.GameReference和GamePlayer.PlayerReference,但我不能检查是否加载了引用,因为我手头没有GamePlayer对象。GamePlayer表包含两个1...*关系,仅此而已。我只能使用GameId和PlayerId来查询GamePlayer。我在这里做错了什么?
我是否应该获取Player (或游戏)对象(使用它们的I)并检查GamePlayer实体集合?Sql是如此简单。如果这太天真了,对不起,我很难将sql查询转换成实体查询。
发布于 2009-02-06 00:12:15
我觉得你现在做的很好。据我所知,您在lambda-expression中使用的任何内容都不必显式加载。
我认为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))
https://stackoverflow.com/questions/406195
复制相似问题