Как я могу получить сущность отношения один ко многим во вложенном ответе? - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть класс Movie

public class Movie
    {

        public int Id { get; set; }
        public string Name { get; set; }
        public Producer ProducerName { get; set; }
    }

и класс Producer

public class Producer
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public ICollection<Movie> Movies { get; set; }
    }

Они имеют отношение один ко многим от продюсера к фильму, т. Е. У продюсера может быть несколько фильмов иу фильма есть только один продюсер.

Я получаю детали фильма с помощью запроса ниже.

var result = _context.Movies
                    .Include(m => m.ProducerName)
                    .ToList();

Я получаю ниже Json:

{
        "id": 1,
        "name": "Venom",
        "producerName": {
            "id": 2,
            "name": "Amy Pascal",
            "movies": [
                {
                    "id": 1,
                    "name": "Venom"
                }
            ]
        }
    }

Я хочу все фильмысвязан с производителем в том же запросе?

Как

{
            "id": 1,
            "name": "Venom",
            "producerName": {
                "id": 2,
                "name": "Amy Pascal",
                "movies": [
                    {
                        "id": 1,
                        "name": "Venom"
                    },
                    {
                        "id": 56,
                        "name": "something"
                    },
                    {
                        "id": 81,
                        "name": "else"
                    }
                ]
            }
        }

Как я могу это сделать?

РЕДАКТИРОВАТЬ: Используя запрос в одном из ответов, я толькополучить один фильм продюсера (текущий) и не все.Я просматриваю базу данных и нахожу, что, хотя между производителем и фильмом есть отношение один ко многим, для одного и того же производителя вставлено несколько строк (с разными первичными ключами).Мой вопрос немного отличается здесь.Я заполняю базу данных с помощью json.Идентификаторы (PK) генерируются базой данных.

JSON используется для заполнения базы данных:

[   
  {
    "Name": "Venom",
    "ProducerName": 
          {
               "Name": "Steven Spielberg"
          }   
  },
  {
    "Name": "Kung Fu League",
    "ProducerName":
          {
               "Name": "Steven Spielberg"
          }  
  }
]

Как я могу ограничить EF Core, чтобы он не создавал дублирующиеся строки для одного и того же производителя и не генерировал другой ключ для того же производителя, что и тогдаМогу ли я получить все фильмы одного продюсера успешно?

1 Ответ

0 голосов
/ 14 декабря 2018

Можно включать в цепочку.Сначала начните с Movies, затем Include Producers и, наконец, используйте ThenInclude, чтобы включить фильмы продюсеров.

Обновление:

Как указал @Gert Arnold при проецировании (не возвращая ваши сущности), Включения игнорируются EF Core, поэтомуесли я выберу проекцию на что-то другое, вы можете удалить Includes.

Итак:

// use .Include and .ThenInclude when returning your entities
var returningEntities = context.Movies
                                 .Include(p => p.ProducerName)
                                 .ThenInclude(m => m.Movies).ToList();

// No need for Include when use projection
var returningAnonymousObject = context.Movies
    .Select(a => new
    {
        id = a.Id,
        name = a.Name,
        producer = new
        {
            id = a.ProducerName.Id,
            name = a.ProducerName.Name,
            movies = a.ProducerName.Movies.Select(m => new
            {
                id = m.Id,
                name = m.Name
            })
        }
    }).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...