Pergunta

Eu tenho 3 tabelas (e entidades correspondentes no modelo de entidade) Jogos: Id - chave primay ... outras colunas

Jogador: Id - chave primária ... outras colunas

gameplayer (um jogador pode participar em muitos jogos) Gameid -> chave estrangeira de Jogo Playerid -> chave estrangeira do Jogador ... outras colunas

No meu código, eu tenho gameid e playerid disponível para me thru' outros meios. Usando esta Eu quero saber se o jogador (playerid) está participando de um jogo particular (gameid). Então, eu estou fazendo isso: (entidades é o meu objeto de contexto)

IQueryable query = entities.GamePlayer.where (gp => ((gp.Game.Id == gameid) && (gp.Player.Id == playerid))) Se a consulta retorna uma linha, então eu sei que o jogador está participando nesse jogo.

Eu li vários blogs MSDN sobre referências de entidade e estou confuso. Parece que MSDN recomenda que primeiro eu tenho que verificar o objeto EntityReference para IsLoaded e se não for carregado, eu tenho que carregar a entidade e só então eu deveria usar isso na consulta.

gameplayer tem GamePlayer.GameReference e GamePlayer.PlayerReference, mas não pode verificar se a referência é carregado porque eu não tenho um objeto gameplayer na mão. mesa gameplayer detém os dois relacionamentos 1 ... * e é sobre ele. Eu tenho que gameplayer consulta usando apenas gameid e playerid. O que estou fazendo de errado aqui?

Devo em vez de obter o objeto Player (ou jogo) (usando seus IDs) e verifique a coleção entidade gameplayer em vez disso? Sql era tão simples. Se isso é tão ingênuo, desculpe, eu estou tendo um momento difícil traduzir a minha consulta SQL para consultas de entidade.

Foi útil?

Solução

Eu acho que você está fazendo é bom. Tanto quanto eu sei, o que você usa no lambda-expressão não tem que ser carregados explicitamente.

Eu acho que o MSDN está se referindo é, se você deseja obter uma entidade gameplayer e, em seguida, acessar uma entidade associada como esta:

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

string gamename = gp.Game.name;

Isso seria lançar uma exceção (você teria que quer carregar o jogo separadamente ou certificar-se de que ele é carregado como este:. Entities.GamePlayer.Include ( "Jogo") First (g => g.id = 2))

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top