C# 如何使用db优先方法在实体框架中编写多对多查询?

C# 如何使用db优先方法在实体框架中编写多对多查询?,c#,entity-framework,C#,Entity Framework,数据库模型: Create table Author ( AuthorID int primary key identity, Name nvarchar(50) ) Create table Book ( BookID int primary key identity, Name nvarchar(50), PageCount int ) Create table AuthorBook ( AuthorID int not null fore

数据库模型:

Create table Author
(
    AuthorID int primary key identity,
    Name nvarchar(50)
)

Create table Book
(
    BookID int primary key identity,
    Name nvarchar(50),
    PageCount int
)

Create table AuthorBook
(
    AuthorID int not null foreign key references Author(AuthorID),
    BookID int not null foreign key references Book(BookID)
)
在创建模型时:

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }

        public virtual DbSet<Author> Author { get; set; }
        public virtual DbSet<AuthorBook> AuthorBook { get; set; }
        public virtual DbSet<Book> Book { get; set; }
        public virtual DbSet<BookGenre> BookGenre { get; set; }
        public virtual DbSet<Genre> Genre { get; set; }
        public virtual DbSet<MyBook> MyBook { get; set; }
        public virtual DbSet<Person> Person { get; set; }
    }
我希望得到这样的名单

books = [{"name": book name, "pageCount": 233, authors = {"Carl", "Mike"}, ....]. 
但实际产出是

[{"name": book name", .. author: "Carl"}, {"name": book, ... author: "Mike"]

首先,您应该在模型中创建图书和作者之间的关系。 检查

创建关系后,现在
Book
实体拥有
作者的集合。
然后简单查询如下:

using (MyLibraryEntities db = new MyLibraryEntities())
{
    var query = db.Book.Select(book =>
            new {
                bookID = book.BookID,
                name = book.Name,
                pageCount = book.PageCount,
                authors = book.Authors.Select(i=>i.Name).ToList()
            }).ToList<dynamic>();
}
使用(MyLibraryEntities db=new MyLibraryEntities())
{
var query=db.Book.Select(Book=>
新的{
bookID=book.bookID,
name=book.name,
pageCount=book.pageCount,
authors=book.authors.Select(i=>i.Name).ToList()
}).ToList();
}

Ado.net实体模型不仅在其集合中创建两个实体,还包括桥接表。我做错了什么?我已经添加了详细信息的SQL查询。是的,添加到了问题。我仍然得到“Book不包含作者的定义”。这似乎很正常,因为Book类仅初始化this.AuthorBook=new HashSet();在它的构造函数中。@GONCAŞİLİK请您将您的书、作者和AuthorBook实体添加到问题中。系统不允许我添加整个代码。但我认为这个问题和错误的关系有关。自动模型生成并没有为图书创建作者关系,它只是添加作者图书。我是否需要在图书和作者之间添加多重关联并删除作者图书?在数据库优先方法中,生成多对多关系的最干净、最安全的方法是什么?
using (MyLibraryEntities db = new MyLibraryEntities())
{
    var query = db.Book.Select(book =>
            new {
                bookID = book.BookID,
                name = book.Name,
                pageCount = book.PageCount,
                authors = book.Authors.Select(i=>i.Name).ToList()
            }).ToList<dynamic>();
}