2

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

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

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

私のコードでは、gameIdとplayerIdを他の方法で利用できます。これを使用して、プレーヤー(playerId)が特定のゲーム(gameId)に参加しているかどうかを知りたいです。だから私はこれをやっています:(エンティティは私のコンテキストオブジェクトです)

IQueryable query = entity.GamePlayer.where(gp =>((gp.Game.Id == gameId)&&(gp.Player.Id == playerId)))クエリが行を返す場合、プレーヤーが参加していることがわかりますそのゲームで。

エンティティ参照に関する複数のMSDNブログを読みましたが、混乱しています。MSDNは、最初にEntityReferenceオブジェクトのIsLoadedを確認する必要があり、ロードされていない場合はエンティティをロードする必要があり、それをクエリで使用することを推奨しているようです。

GamePlayerにはGamePlayer.GameReferenceとGamePlayer.PlayerReferenceがありますが、GamePlayerオブジェクトが手元にないため、参照がロードされているかどうかを確認できません。GamePlayerテーブルは、2つの1...*関係を保持します。GameIdとPlayerIdのみを使用してGamePlayerにクエリを実行する必要があります。私はここで何が間違っているのですか?

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

4

1 に答える 1

1

あなたのしていることは大丈夫だと思います。私の知る限り、ラムダ式で使用するものはすべて、明示的にロードする必要はありません。

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

于 2009-02-06T00:12:14.590 に答える