Frage

Ich habe 3 Tabellen (und die entsprechenden Einheiten in dem Entity-Modell) Spiel: Id - primay Schlüssel ... weitere Spalten

Spieler: Id - Primärschlüssel ... weitere Spalten

Gameplayer (ein Spieler in vielen Spielen teilnehmen kann) GameID -> Fremdschlüssel aus Spiel Playerid -> Fremdschlüssel von Spielern ... weitere Spalten

In meinem Code habe ich GameID und playerId mir zur Verfügung thru‘andere Mittel. Mit diesem Ich möchte wissen, ob der Spieler (playerId) in einem bestimmten Spiel (GameID) teilnehmen. Also habe ich das tue: (Entitäten ist mein Kontextobjekt)

IQueryable query = entities.GamePlayer.where (gp => ((gp.Game.Id == GameID) && (gp.Player.Id == playerId))) Wenn die Abfrage eine Zeile zurückgibt, dann weiß ich, dass Spieler in diesem Spiel beteiligt ist.

Ich lese mehr MSDN Blogs auf Entitätsverweise und ich bin verwirrt. Es scheint, dass MSDN empfiehlt, dass ich zuerst das EntityReference Objekt für IsLoaded zu überprüfen und, wenn nicht geladen, ich habe die Einheit zu laden und erst dann soll ich das in der Abfrage verwenden.

Gameplayer hat GamePlayer.GameReference und GamePlayer.PlayerReference, aber ich kann nicht überprüfen, ob Referenz geladen wird, weil ich nicht ein Objekt Gameplayer in der Hand. Gameplayer Tisch hält die beiden 1 ... * Beziehungen und das ist es. Ich habe die Abfrage nur Gameplayer GameID und playerid verwenden. Was mache ich falsch hier?

Sollte ich stattdessen die Spieler bekommen (oder Spiel) Objekt (mit ihrem Ids) und überprüfen Sie die Gameplayer Einheit Sammlung statt? Sql war so einfach. Wenn dies so naiv ist, sorry, ich habe eine harte Zeit, meine SQL-Abfrage zu Entitätsabfragen übersetzen.

War es hilfreich?

Lösung

Ich denke, was Sie tun, ist in Ordnung. Soweit ich weiß, was Sie in dem Lambda-Ausdruck verwenden, muss nicht explizit geladen werden.

Ich denke, was MSDN bezieht sich auf, wenn Sie eine Gameplayer Einheit erhalten würde und dann eine zugehörige Einheit wie folgt zugreifen:

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

string Gamename = gp.Game.name;

Das wäre eine Ausnahme auslösen (Sie würden haben, entweder das Spiel laden separat oder stellen Sie sicher, es so geladen wird. Entities.GamePlayer.Include ( „Spiel“) First (g => g.id = 2))

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top