質問

3つのテーブル(およびエンティティモデルの対応するエンティティ)があります ゲーム: Id-primayキー ...その他の列

プレーヤー: Id-主キー ...その他の列

GamePlayer(プレーヤーは多くのゲームに参加できます) GameId->ゲームからの外部キー PlayerId-> Playerからの外部キー ...その他の列

コードでは、他の方法で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テーブルは、2つの1 ... *関係を保持し、それについてのものです。 GameIdとPlayerIdのみを使用してGamePlayerをクエリする必要があります。ここで何が間違っていますか?

代わりにPlayer(またはGame)オブジェクト(IDを使用)を取得し、代わりにGamePlayerエンティティコレクションを確認する必要がありますか? SQLはとてもシンプルでした。これがあまりにも素朴な場合は、申し訳ありませんが、SQLクエリをエンティティクエリに変換するのは大変です。

役に立ちましたか?

解決

あなたがやっていることは大丈夫だと思います。私の知る限り、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 ))

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top