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) )