Domanda

Ho 3 tabelle (e entità corrispondenti nel modello entità) Gioco: Id - chiave di inserimento ... altre colonne

giocatore: Id: chiave primaria ... altre colonne

GamePlayer (un giocatore può partecipare a molti giochi) GameId - > chiave esterna dal gioco PlayerId - > chiave esterna dal lettore ... altre colonne

Nel mio codice, ho gameId e playerId disponibili per me attraverso altri mezzi. Usando questo voglio sapere se il giocatore (playerId) partecipa a un gioco particolare (gameId). Quindi sto facendo questo: (entità è il mio oggetto di contesto)

IQueryable query = entity.GamePlayer.where (gp = > ((gp.Game.Id == gameId) & amp; & amp; (gp.Player.Id == playerId))) Se la query restituisce una riga, allora so che il giocatore sta partecipando a quel gioco.

Ho letto più blog MSDN sui riferimenti alle entità e sono confuso. Sembra che MSDN mi consiglia di controllare prima l'oggetto EntityReference per IsLoaded e, se non caricato, devo caricare l'entità e SOLO quindi dovrei usarlo nella query.

GamePlayer ha GamePlayer.GameReference e GamePlayer.PlayerReference, ma non riesco a verificare se il riferimento è caricato perché non ho in mano un oggetto GamePlayer. La tabella GamePlayer contiene le due relazioni 1 ... * e questo è tutto. Devo interrogare GamePlayer solo usando GameId e PlayerId. Cosa sto facendo di sbagliato qui?

Dovrei invece ottenere l'oggetto Giocatore (o Gioco) (usando i loro ID) e controllare invece la raccolta di entità GamePlayer? Sql era così semplice. Se è così ingenuo, mi dispiace, sto facendo fatica a tradurre la mia query sql in query di entità.

È stato utile?

Soluzione

Penso che quello che stai facendo vada bene. Per quanto ne so, qualunque cosa tu usi nell'espressione lambda non deve essere caricata esplicitamente.

Penso che a cosa si riferisca MSDN se vuoi ottenere un'entità GamePlayer e accedere a un'entità associata come questa:

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

string gameName = gp.Game.name;

Ciò genererebbe un'eccezione (dovresti caricare il gioco separatamente o assicurarti che sia caricato in questo modo: entity.GamePlayer.Include (" Game "). Primo (g = > g.id = 2 ))

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top