C# 如何在ASP.NET核心WEB API中实现多对多关系

C# 如何在ASP.NET核心WEB API中实现多对多关系,c#,asp.net,.net,asp.net-core,entity-framework-core,C#,Asp.net,.net,Asp.net Core,Entity Framework Core,所以我有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> BookCateg

所以我有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; }
    }

我知道如何处理一对多的关系,我为作者和书创建了API,每个作者都有一系列他写的书。但是这个连接表(BookCategory)让我很困惑。

对于返回的json格式,您可以先通过
Include
然后Include
获取所有相关数据

然后使用
选择
方法和新对象来形成返回的数据结构:

        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);
        }
以下是返回的数据:


对于返回的json格式,您可以首先通过
Include
然后Include
获取所有相关数据

然后使用
选择
方法和新对象来形成返回的数据结构:

        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);
        }
以下是返回的数据:


你试过什么吗?文档对这些事情有着非常好的描述:这里有很多假设:从dbContext获取书籍,包括BookCategories。当映射到视图模型时,只需将类别名称选择到数组中,这是模型所期望的。您尝试过什么吗?文档对这些事情有着非常好的描述:这里有很多假设:从dbContext获取书籍,包括BookCategories。映射到视图模型时,只需将类别名称选择到数组中,这是模型所期望的。