Условное включение в ядро ​​asp.net и Entity Framework - PullRequest
0 голосов
/ 04 июня 2019

Я только начал свой первый проект, используя ядро ​​asp.net, и впервые я собираюсь использовать репозиторий кода для своего проекта в C # и VS 2019. Я создаю новую модель, и она называется Комментарий. В этой таблице можно сохранить все комментарии к проекту, то есть пользовательские комментарии в сообщениях POSTS, SOCIALMEDIA и т. Д. Области, сохраненные в этой таблице

[Key]
public int CommentId { get; set; }

public eTable Table { get; set; }

public int ContentId { get; set; }

[StringLength(1500)]
public string Notes { get; set; }

public virtual AnalysedMarket AnalysedMarket { get; set; }

ContentID - мой внешний ключ, а мой тип перечисления eTable выглядит следующим образом:

public enum eTable
{
    AnalysedMarket,
    Blog,
    News,
    Migration,
}

Я создал новый класс для AnalysedMarket, а также для сохранения данных пользователей из нашей области социальных сетей.

[Key]
public int AnalysedMarketId { get; set; }

[StringLength(255)]
public string Images { get; set; }

public int Hits { get; set; }

public string Notes { get; set; }``

Теперь я создал метод в своем хранилище кода для извлечения данных, используя EF и LINQ для получения списка данных AnalysedMarket, но я не могу включить свой результат в таблицу комментариев, и результат моего хранилища кода в разделе комментариев всегда равен нулю.

public async Task<IEnumerable<AnalysedMarket>> List(int? page, int? perPage, eStatus? status, string userId)
{
  var query = _db.AnalysedMarkets.Select(a => a);

  if (status.HasValue)
      query = query.Where(m => m.Status.Equals(status));

  if (!string.IsNullOrEmpty(userId))
      query.Where(m => m.CreatedBy.Equals(userId));

  query.Include(a => a.Comments.Where(c => c.Table.Equals(eTable.AnalysedMarket) && c.ContentId == a.AnalysedMarketId));

  if (page.HasValue && perPage.HasValue)
      return await query.OrderBy(a => a.AnalysedMarketId).ToPagedListAsync(page.Value, perPage.Value);
  else
      return await query.OrderBy(a => a.AnalysedMarketId).ToListAsync();
}

На самом деле мой вопрос заключается в том, как получить список данных AnalysedMarket, включенных в данные комментариев. И у него есть условие, и в нем указано включение комментария, если ContentId равен AnalysedMarketId, а eTable - Table.AnalysedMarket.

Я читал статьи об условном включении, но ничего из них не получил. Пример 1 Пример 2

1 Ответ

0 голосов
/ 04 июня 2019

Вам необходимо добавить ссылку из AnalysedMarket, чтобы комментировать подобное в своем AnalysedMarket-Class:

ICollection<Comment> Comments { get; set; }

, а затем включить их при запросе к AnalysedMarkets следующим образом:

var query = _db.AnalysedMarkets.Include(c => c.Comments);

/ Редактировать: Что касается вашего комментария - для этого вам понадобится иерархическая структура / структура наследования.Кажется, поддерживается EfCore , и что-то вроде этого должно работать:

public class CommentableItem {
    ICollection<Comment> Comments {get;set;}
}

public class Comment {
    CommentableItem CommentableItem {get;set;}
}

public class AnalysedMarket : CommentableItem {
}

Чем вы сможете использовать включение для каждого элемента, наследуемого от CommentableItem.Я еще не использовал функцию наследования (насколько я знаю, это довольно новое для EF Core), поэтому для дальнейших инструкций см. Документацию

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