문제

3 개의 테이블 (및 엔티티 모델의 해당 엔티티) 게임 : ID -Primay Key ... 기타 열이 있습니다.

플레이어 : ID- 기본 키 ... 기타 열

게임 플레이어 (플레이어가 많은 게임에 참여할 수 있음) GameId-> Game PlayerId의 외국 키 -> 플레이어의 외국 키 ... 기타 열

내 코드에는 다른 수단을 통해 gameid와 playerId를 사용할 수 있습니다. 이것을 사용하여 플레이어 (PlayerID)가 특정 게임 (GameID)에 참여하고 있는지 알고 싶습니다. 그래서 저는 이것을하고 있습니다 : (엔티티는 내 문맥 대상입니다)

iqueryable query = entities.gameplayer.where (gp => ((gp.game.id == gameId) && (gp.player.id == playerId)))) 쿼리가 행을 반환하면 플레이어가 참여하고 있음을 알고 있습니다. 그 게임에서.

엔티티 참조에 대해 여러 MSDN 블로그를 읽었으며 혼란스러워합니다. MSDN은 먼저 ISLOADED의 EntityReference 객체를 확인해야하며로드되지 않은 경우 엔티티를로드해야하며 쿼리에서만 사용해야합니다.

GamePlayer에는 GamePlayer.gameReference 및 GamePlayer.PlayerReference가 있지만 게임 플레이어 객체가 없어서 참조가로드되었는지 확인할 수 없습니다. 게임 플레이어 테이블은 두 가지 1 ...* 관계를 유지합니다. GameId 및 PlayerId를 사용하여 게임 플레이어를 쿼리해야합니다. 여기서 내가 뭘 잘못하고 있니?

대신 플레이어 (또는 게임) 객체 (ID를 사용하여)를 받고 대신 게임 플레이어 엔티티 컬렉션을 확인해야합니까? SQL은 매우 간단했습니다. 이것이 너무 순진한 경우 죄송합니다. SQL 쿼리를 엔티티 쿼리로 번역하는 데 어려움을 겪고 있습니다.

도움이 되었습니까?

해결책

나는 당신이하는 일이 괜찮다고 생각합니다. 내가 아는 한, Lambda-Expression에서 사용하는 모든 것을 명시 적으로로드 할 필요는 없습니다.

MSDN이 언급하는 것은 게임 플레이어 엔티티를 얻은 다음 다음과 같은 관련 엔티티에 액세스 할 수 있다고 생각합니다.

게임 플레이어 gp = entities.gameplayer.first (g => g.id = 2);

문자열 gamename = gp.game.name;

그것은 예외를 던질 것입니다 (게임을 별도로로드하거나 다음과 같이로드해야합니다. entities.gameplayer.include ( "게임"). 첫 번째 (g => g.id = 2)).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top