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