[英]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.