2

J'ai 3 tables (et les entités correspondantes dans le modèle d'entité) jeu: Id - primay clés ... autres colonnesComment accéder aux clés étrangères dans le modèle d'entité ADO.NET?

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 gameid et p layerId disponible pour moi 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)

requête IQueryable = entities.GamePlayer.where (gp => ((gp.Game.Id == gameid) & & (gp.Player.Id = = playerId))) Si la requête renvoie une ligne, je sais que ce joueur participe à ce jeu. Je lis plusieurs blogs MSDN sur des références d'entité et je suis confus. Il semble que MSDN recommande d'abord de vérifier l'objet EntityReference pour IsLoaded et s'il n'est pas chargé, je dois charger l'entité et SEULEMENT alors je devrais l'utiliser dans la requête.

GamePlayer possède 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 en main. La table GamePlayer contient les deux relations 1 ... * et c'est à peu près tout. Je dois interroger GamePlayer en utilisant seulement GameId et PlayerId. Qu'est-ce que je fais mal ici? Dois-je à la place obtenir l'objet Player (ou Game) (en utilisant leur identifiant) et vérifier plutôt la collection d'entités GamePlayer? Sql était si simple. Si cela est si naïf, désolé, j'ai du mal à traduire ma requête sql en requêtes d'entités.

Répondre

1

Je pense que ce que vous faites est bien. Pour autant que je sache, tout ce que vous utilisez dans l'expression lambda ne doit pas être chargé explicitement.

Je pense que MSDN fait référence est si vous obtenez une entité Gameplayer et ensuite accéder à une entité associée comme ceci:

Gameplayer gp = entities.GamePlayer.First (g => g.id = 2) ;

string gameName = gp.Nom de jeu; Cela déclencherait une exception (vous devrez charger le jeu séparément ou vous assurer qu'il est chargé comme suit: entities.GamePlayer.Include ("Game"). First (g => g.id = 2))

Questions connexes