Pregunta

Tengo 3 tablas (y entidades correspondientes en el modelo de entidad) Juego: Id - clave primay ... otras columnas

Jugador: Id - clave principal ... otras columnas

GamePlayer (un jugador puede participar en muchos juegos) ID de juego - > clave externa del juego PlayerId - > clave externa del jugador ... otras columnas

En mi código, tengo gameId y playerId disponibles a través de otros medios. Con esto, quiero saber si el jugador (playerId) participa en un juego en particular (gameId). Entonces estoy haciendo esto: (entidades es mi objeto de contexto)

IQueryable query = entidades.GamePlayer.where (gp = > ((gp.Game.Id == gameId) & amp; & amp; & amp; (gp.Player.Id == playerId))) Si la consulta devuelve una fila, entonces sé que ese jugador está participando en ese juego.

Leí varios blogs de MSDN en referencias de entidades y estoy confundido. Parece que MSDN recomienda que primero tenga que verificar el objeto EntityReference para IsLoaded y, si no está cargado, tengo que cargar la entidad y SOLO entonces debería usarlo en la consulta.

GamePlayer tiene GamePlayer.GameReference y GamePlayer.PlayerReference, pero no puedo comprobar si la referencia está cargada porque no tengo un objeto GamePlayer en la mano. La tabla GamePlayer contiene las dos relaciones 1 ... * y eso es todo. Tengo que consultar GamePlayer solo con GameId y PlayerId. ¿Qué estoy haciendo mal aquí?

¿Debería obtener el objeto Jugador (o Juego) (usando sus Ids) y verificar la colección de entidades GamePlayer? SQL fue muy simple. Si esto es tan ingenuo, lo siento, me está costando mucho traducir mi consulta SQL a consultas de entidad.

¿Fue útil?

Solución

Creo que lo que estás haciendo está bien. Hasta donde sé, lo que sea que uses en la expresión lambda no tiene que cargarse explícitamente.

Creo que a lo que se refiere MSDN es si obtendrías una entidad GamePlayer y luego accedes a una entidad asociada como esta:

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

string gameName = gp.Game.name;

Eso generaría una excepción (deberías cargar el juego por separado o asegurarte de que esté cargado de esta manera: entities.GamePlayer.Include (" Juego "). Primero (g = > g.id = 2 ))

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top