Вопрос

У меня есть 3 таблицы (и соответствующие объекты в модели объекта):ID - Primay Key ...другие столбцы

Игрок:ID - Первичный ключ ...другие столбцы

Геймплейер (игрок может участвовать во многих играх) -> Иностранный ключ из Game PlayerId -> Иностранный ключ от Player ...другие столбцы

В моем коде у меня есть gameId и playerId, доступные мне другими способами.Используя это, я хочу знать, участвует ли игрок (playerId) в определенной игре (gameId).Итак, я делаю это:(сущности — мой объект контекста)

Iqueryable Query = entities.gameplayer.where (gp => ((gp.game.id == gameid) && (gp.player.id == playerid)), если запрос возвращает ряд, то я знаю, что игрок участвует в этой игре.

Я прочитал несколько блогов MSDN о ссылках на сущности и запутался.Похоже, что MSDN рекомендует сначала проверить объект EntityReference на наличие IsLoaded, и, если он не загружен, мне нужно загрузить объект, и ТОЛЬКО тогда я должен использовать его в запросе.

У GamePlayer есть GamePlayer.GameReference и GamePlayer.PlayerReference, но я не могу проверить, загружена ли ссылка, потому что у меня нет объекта GamePlayer.Таблица GamePlayer содержит два отношения 1...*, вот и все.Мне нужно запросить GamePlayer только с использованием GameId и PlayerId.Что я здесь делаю не так?

Должен ли я вместо этого получить объект Player (или Game) (используя его идентификаторы) и вместо этого проверить коллекцию сущностей GamePlayer?Sql был таким простым.Если это так наивно, извините, мне сложно перевести мой SQL-запрос в запросы сущностей.

Это было полезно?

Решение

Я думаю, то, что ты делаешь, это нормально.Насколько я знаю, все, что вы используете в лямбда-выражении, не обязательно загружать явно.

Я думаю, что MSDN имеет в виду, если вы получите объект GamePlayer, а затем получите доступ к связанному объекту следующим образом:

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

строка gameName = gp.Game.name;

Это вызовет исключение (вам придется либо загрузить игру отдельно, либо убедиться, что она загружена следующим образом:юридические лица.GamePlayer.Include("Игра").First( g => g.id = 2))

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top