DbContext для TMDb

176
11 января 2018, 19:05

Здравствуйте.

Появилась необходимость скопировать себе базу фильмов с TMDb.org
Готовых дампов я не нашёл и даже администрация сайта предлагает перебирать все фильмы по ID с 1 по последний.
Скорее всего не у меня одного возникала такая необходимость, поэтому хотелось бы узнать, есть ли уже какие-то готовые решения, чтобы не заниматься рутиной и не городить свой велосипед.

Если же таких решений нет, то подскажите пожалуйста как правильно описать контекст таблицы для класса со свойствами в виде объектов других классов.
Платформа .Net Core ConsoleApp
Я использую PostgreSQL с EntityFramework и Npgsql.EntityFrameworkCore.PostgreSQL
Для использования TMDb API использую библиотеку TMDbLib
У этой библиотеки уже есть рабочие сущности для фильмов и их полей, поэтому хотелось бы иметь возможность не писать новые классы для таблиц, а использовать уже имеющиеся. Такое возможно или им всё же чего-то не хватает?

БД и таблицы, соответственно, планировалось уже создать программно на основе имеющегося контекста.

Просто ранее мне доводилось работать только с объектами, имеющими лишь примитивные поля (текст/число), а вот с коллекциями и составными объектами нет.

Самое очевидное что приходит в голову, это написать новые классы (или унаследовать?) на основе существующих заново, добавив всем поле для ID, а в основном классе Movie поменять поля типа класса на поле типа int и хранить ID, указывающий на строку уже в таблице с тем типом класса. Коллекции же, наверное, можно будет хранить в виде строки, в которой содержится перечисление ID через запятую (или любой другой разделитель).
Или таки есть другое решение, которое не требует столько рутинной работы?

Вот описание класса, который хотелось бы записать в виде БД:

public class Movie
{
    public Movie();
    [JsonProperty("production_companies")]
    public List<ProductionCompany> ProductionCompanies { get; set; }
    [JsonProperty("production_countries")]
    public List<ProductionCountry> ProductionCountries { get; set; }
    [JsonProperty("release_date")]
    public DateTime? ReleaseDate { get; set; }
    [JsonProperty("release_dates")]
    public ResultContainer<ReleaseDatesContainer> ReleaseDates { get; set; }
    [JsonProperty("releases")]
    public Releases Releases { get; set; }
    [JsonProperty("revenue")]
    public long Revenue { get; set; }
    [JsonProperty("reviews")]
    public SearchContainer<ReviewBase> Reviews { get; set; }
    [JsonProperty("poster_path")]
    public string PosterPath { get; set; }
    [JsonProperty("runtime")]
    public int? Runtime { get; set; }
    [JsonProperty("spoken_languages")]
    public List<SpokenLanguage> SpokenLanguages { get; set; }
    [JsonProperty("status")]
    public string Status { get; set; }
    [JsonProperty("tagline")]
    public string Tagline { get; set; }
    [JsonProperty("title")]
    public string Title { get; set; }
    [JsonProperty("translations")]
    public TranslationsContainer Translations { get; set; }
    [JsonProperty("video")]
    public bool Video { get; set; }
    [JsonProperty("videos")]
    public ResultContainer<Video> Videos { get; set; }
    [JsonProperty("similar")]
    public SearchContainer<SearchMovie> Similar { get; set; }
    [JsonProperty("vote_average")]
    public double VoteAverage { get; set; }
    [JsonProperty("popularity")]
    public double Popularity { get; set; }
    [JsonProperty("original_title")]
    public string OriginalTitle { get; set; }
    [JsonProperty("account_states")]
    public AccountState AccountStates { get; set; }
    [JsonProperty("adult")]
    public bool Adult { get; set; }
    [JsonProperty("alternative_titles")]
    public AlternativeTitles AlternativeTitles { get; set; }
    [JsonProperty("backdrop_path")]
    public string BackdropPath { get; set; }
    [JsonProperty("belongs_to_collection")]
    public SearchCollection BelongsToCollection { get; set; }
    [JsonProperty("budget")]
    public long Budget { get; set; }
    [JsonProperty("changes")]
    public ChangesContainer Changes { get; set; }
    [JsonProperty("overview")]
    public string Overview { get; set; }
    [JsonProperty("credits")]
    public Credits Credits { get; set; }
    [JsonProperty("homepage")]
    public string Homepage { get; set; }
    [JsonProperty("id")]
    public int Id { get; set; }
    [JsonProperty("images")]
    public Images Images { get; set; }
    [JsonProperty("imdb_id")]
    public string ImdbId { get; set; }
    [JsonProperty("keywords")]
    public KeywordsContainer Keywords { get; set; }
    [JsonProperty("lists")]
    public SearchContainer<ListResult> Lists { get; set; }
    [JsonProperty("original_language")]
    public string OriginalLanguage { get; set; }
    [JsonProperty("genres")]
    public List<Genre> Genres { get; set; }
    [JsonProperty("vote_count")]
    public int VoteCount { get; set; }
}

На всякий случай, сущности всех описанных здесь классов есть по ссылке:
https://github.com/LordMike/TMDbLib/tree/master/TMDbLib/Objects

Буду рад любой информации, ссылкам на инструкции и примерам других контекстов для подобных классов.

READ ALSO
При установке свойства TopMost приложение воспринимается как троян

При установке свойства TopMost приложение воспринимается как троян

Писал Winform-приложение, чтобы делать скриншоты выбранной области экрана (аналог "Ножниц" от Windows)

166
Сравнение строчки в ComboBox WPF C#

Сравнение строчки в ComboBox WPF C#

При нажатии на элемент "111

171
Сортировка списка на отсутствие null

Сортировка списка на отсутствие null

Доброй ночиКак правильно реализовать проверку полей на null

162
Необходима помощь по замыканиям.

Необходима помощь по замыканиям.

Прохожу учебник по JS на известном сайте, и вроде я понял замыкания, осозналНо

230