ThenInclude добавляет навигационную таблицу, которую я не включил - PullRequest
0 голосов
/ 05 мая 2018

У меня есть 3 кода первых таблиц, «Турнир», «Расписание» и «Игра»

class Tournament
  public int Id { get; set; }
  public string Name { get; set; }
  //relationship to schedule
  public ICollection<Schedule> Schedule { get; set; }

class Schedule
  public int Id { get; set; }
  public DateTime Date { get; set; }

  //relation to game
  public Game Game { get; set; }
  public int GameId { get; set; }

class Game
  public int Id { get; set; }

  //relation to schedule
  public ICollection<Schedule> Schedule { get; set; }

Турнир имеет расписание «один ко многим», а расписание имеет одну игру, все столы соединены с полным объединением. как указано выше.

Теперь я хочу получить все турниры с расписанием и игрой. Итак, код ниже

 var tournament = _context.Tournament
 .Include(t => t.Schedule)
 .ThenInclude(game => game.Game);

Проблема в том,

Я получаю Турниры и внутри одного турнира информацию о расписании и информацию о внутриигровом расписании.

Но я также получаю графики внутри игры. Но я не уточнил, получать ли данные в расписании игры.

Как избежать получения этой избыточной информации. Есть ли проблемы с моей структурой таблицы?

Возвращенный объект.

{
    "id": 2,
    "name": "Professional League 2018",
    "schedule": [
      {
        "id": 2,
        "date": "0001-01-01T00:00:00",
        "gameId": 5,
        "game": {
          "id": 5,
          "name": "League of Legend",

          "schedule": [ //This information i want to removed.
            {
              "id": 4,
              "date": "0001-01-01T00:00:00",
              "gameId": 5,

1 Ответ

0 голосов
/ 05 мая 2018

Entity Framework обнаруживает, что запись принадлежит нескольким путям, как в вашем случае, и даже если она извлекает ее из базы данных только один раз, все пути ссылаются на один и тот же объект в памяти.

Если вы не хотите возвращать эту дополнительную информацию, вам нужно исключить ее из сериализации:

class Tournament
  public int Id { get; set; }
  public string Name { get; set; }

  //relationship to schedule
  public ICollection<Schedule> Schedule { get; set; }

class Schedule
  public int Id { get; set; }
  public DateTime Date { get; set; }

  //relation to game
  public Game Game { get; set; }
  public int GameId { get; set; }

class Game
  public int Id { get; set; }

  //relation to schedule
  [JsonIgnore] //ignore when serializing with NewtonSoft.Json   
  public ICollection<Schedule> Schedule { get; set; }

Однако, довольно странно, что Tournament имеет коллекцию Schedule. Разве он не должен иметь коллекцию Game, которая в свою очередь имеет коллекцию Schedule?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...