繁体   English   中英

如何使用 db first 方法在 Entity Framework 中编写多对多查询?

[英]How to write many to many query in Entity Framework with db first approach?

数据库模型:

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)
)

OnModel 创建:

        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; }
    }

book 和 author 表与autor_book连接表存在多对多关系。 我如何获得作者的书籍?

using (MyLibraryEntities db = new MyLibraryEntities())
{
    var query = db.Book.SelectMany(book => db.Author, (book, author) =>
            new {
                bookID = book.BookID,
                name = book.Name,
                pageCount = book.PageCount,
                authorId = author.AuthorID,
                authorName = author.Name
            }).ToList<dynamic>();
}

我希望得到像

books = [{"name": book name, "pageCount": 233, authors = {"Carl", "Mike"}, ....]. 

但实际输出是;

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

首先,您应该在 Model 中创建 Book 和 Author 之间的关系。 在这里查看

创建关系后,现在Book实体具有 Collection of Author 然后查询简单为:

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>();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM