Строки одной таблицы как столбец в другой

190
27 июня 2018, 14:50

Допустим есть БД для хранения постов.
Пост, как сущность в приложении может представлять из себя примерно следующий класс:

public class Post
{
    public int Id { get; set; }
    public User Author { get; set; } //Автор поста
    public string Caption { get; set; } 
    public string Text { get; set; }
    public Attachment[] Attachments { get; set; } //Вложения (картинки, видео)
    public Comment[] Comments { get; set; } //Комментарии
}
public class Comment
{
    public int Id { get; set; }
    public User Author { get; set; } //Автор комментария
    public string Text { get; set; }
    public Attachment[] Attachments { get; set; } //Вложения (картинки, видео)
}
public class Attachment
{
    public int Id { get; set; }
    public string Type { get; set; } //'image' или 'video'
    public string Link { get; set; } //прямая ссылка или embed
}

Но в БД у автора (пользователей), вложений и комментариев будут свои таблицы.

В контексте же БД в таблице поста будет храниться лишь id автора поста.
Комментарии в ней не будут упоминаться, т.к., опять же, логичнее разместить столбец post_id в таблице комментариев и таким образом фильтровать комментарии выбранного поста.
Вложения, скорее всего, не будут иметь единственного владельца (в отличии от комментариев), так что в таблице постов они будут как массив id вложений.

Как я себе представляю то, как оно должно выглядеть:

Можно ли как-то при помощи LINQ и Entity Framework отправить один запрос, который вернёт полностью заполненный объект класса Post?

Если да, то как правильно оформить сущности и таблицы, чтобы оно работало корректно?

Опыта работы с БД у меня мало, так что описанное выше это не жёсткие требования задачи, а скорее моё видение ситуации.
Если у вас есть какие-то предложения или исправления в постановке задачи, также буду рад выслушать.

Пока что я вижу только решение "в лоб" с 4 запросами к БД на каждый пост, что выглядит не очень хорошо.

  1. Запросить пост из таблицы постов,
  2. Запросить пользователя по author_id из таблицы пользователей,
  3. Отфильтровать комментарии по id поста из таблицы комментариев,
  4. Запросить все вложения с id соответствующие массиву id-шников, перечисленных в посте из таблицы вложений.
READ ALSO
Определение границ массива sqlReader

Определение границ массива sqlReader

Как определить границу sqlReader[r] чтобы не вылетать за пределы массива

186
Отправка картинки на сервер WPF - Web Api Core - C#

Отправка картинки на сервер WPF - Web Api Core - C#

Не совсем понимаю некоторые вещи в веб технологиях

369
Можно ли избавиться от повтора заменив на WHERE rn<30 или типа того?

Можно ли избавиться от повтора заменив на WHERE rn<30 или типа того?

Напишите детерминированную функцию от двух параметров

169
помогите сопоставить SQL запрос

помогите сопоставить SQL запрос

помогите сопоставить SQL запрос

197