Question

J'ai 3 tables (et les entités correspondantes dans le modèle d'entité) Jeu: Id - clé primaire ... autres colonnes

Joueur: Id - clé primaire ... autres colonnes

GamePlayer (un joueur peut participer à de nombreux jeux) GameId - > clé étrangère du jeu PlayerId - > clé étrangère du joueur ... autres colonnes

Dans mon code, je dispose de gameId et de playerId par d'autres moyens. En utilisant ceci, je veux savoir si le joueur (playerId) participe à un jeu particulier (gameId). Donc, je fais ceci: (entités est mon objet de contexte)

IQueryable query = entity.GamePlayer.where (gp = > ((gp.Game.Id == gameId) & amp; & amp; & gp.Player.Id == playerId)) Si la requête renvoie une ligne, je sais que ce joueur participe à ce jeu.

J'ai lu plusieurs blogs MSDN sur les références d'entités et je suis confus. Il semble que MSDN recommande d’abord de vérifier l’objet IsLoaded de l’objet EntityReference et, s’il n’est pas chargé, de charger l’entité et, UNIQUEMENT, de l’utiliser dans la requête.

GamePlayer a bien GamePlayer.GameReference et GamePlayer.PlayerReference, mais je ne peux pas vérifier si la référence est chargée car je n'ai pas d'objet GamePlayer à la main. La table GamePlayer contient les deux relations 1 ... * et c'est à peu près tout. Je dois interroger GamePlayer uniquement à l'aide de GameId et PlayerId. Qu'est-ce que je fais mal ici?

Devrais-je plutôt obtenir l'objet Player (ou Game) (en utilisant leurs identifiants) et vérifier la collection d'entités GamePlayer? SQL était si simple. Si cela est si naïf, désolé, je ne parviens pas à traduire ma requête SQL en requêtes d'entité.

Était-ce utile?

La solution

Je pense que ce que vous faites est bien. Autant que je sache, quoi que vous utilisiez dans l'expression lambda ne doit pas être chargé explicitement.

Je pense que MSDN fait référence à si vous voulez obtenir une entité GamePlayer puis accéder à une entité associée comme ceci:

GamePlayer gp = entités.GamePlayer.Premier (g = > g.id = 2);

string gameName = gp.Game.name;

Cela créerait une exception (vous devrez soit charger le jeu séparément, soit vous assurer qu'il est chargé comme suit: entity.GamePlayer.Include ("Game"). First (g = > g.id = 2 ))

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top