Как реализовать отношения "многие ко многим" в ASP. NET CORE WEB API - PullRequest
0 голосов
/ 06 августа 2020

Итак, у меня есть 4 класса:

    public class Book
    {
      public int BookId { get; set; }
      public string Title { get; set; }
      public Author Author { get; set; }
      public int AuthorId { get; set; }
      public ICollection<BookCategory> BookCategories { get; set; }
    }  

    public class Author
    {
      public int AuthorId { get; set; }
      public string Name { get; set; }
      public string Surname { get; set; }
      public ICollection<Book> Books { get; set; }
    }  

    public class Category
    {
      public int CategoryId { get; set; }
      public string CategoryName { get; set; }
      public ICollection<BookCategory> BookCategories { get; set; }
    }

    public class BookCategory
    {
      public int BookId { get; set; }
      public Book Book { get; set; }
      public int CategoryId { get; set; }
      public Category Category { get; set; }
    }

Я хочу написать функцию для запроса [HttpGet], чтобы он возвращал JSON вот так:

[
  {
     "bookId": "1",
     "title": "Book Title 1",
     "authorName": "Author Name 1",
     "aurhorSurname": "Author Surname 1",
     "categories": ["category1", "category2"]
  },
  {
     "bookId": "2",
     "title": "Book Title 2",
     "authorName": "Author Name 1",
     "aurhorSurname": "Author Surname 1",
     "categories": ["category2", "category3"]
  },
  {
     "bookId": "3",
     "title": "Book Title 3",
     "authorName": "Author Name 1",
     "aurhorSurname": "Author Surname 1",
     "categories": ["category1", "category4"]
  },
]

Я знаю как работать с отношениями «один ко многим», и я создал API для авторов и книг, где у каждого автора есть массив книг, которые он написал. Но эта объединенная таблица (BookCategory) меня смущает.

1 Ответ

1 голос
/ 07 августа 2020

Для возвращенного формата json вы можете сначала получить все связанные данные через Include и ThenInclude.

Затем используйте метод Select и новые объекты для формирования структуры возвращаемых данных:

        public IActionResult ReturnJson()
        { 
            var data = _context.Book.Include(x => x.Author)
                .Include(x => x.BookCategories).ThenInclude(x => x.Category)
                .Select(x => new
                {
                    bookId = x.BookId,
                    title = x.Title,
                    authorName = x.Author.Name,
                    authorSurname = x.Author.Surname,
                    categories = x.BookCategories.Select(k => k.Category.CategoryName).ToList()
                });
            return Json(data);
        }

Вот возвращенные данные:

введите описание изображения здесь

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