如何使用实体框架核心和ASP.NET Web API创建并保存工作列表



我正在制作一个类似于谷歌课堂的网络应用程序,因为你可以加入课堂。我有一节课;帐户";在该帐户中,我有一个列表,其中应该包含该帐户已加入的所有类的ID。我试着把这个列表做成一个长列表,但我做不到,因为我得到了错误:

System.InvalidOperationException:'属性'帐户_classesJoined"无法映射,因为它的类型为"List"不是受支持的基元类型或有效实体类型显式映射此属性,或使用"[NotMapped]"特性或在中使用"EntityTypeBuilder.Ignore"OnModelCreating"。

我解决这个问题的方法是创建一个类"JoinedClassId";而是用一个属性";classIdNumber";。然而,在测试过程中,我注意到我添加到Account对象的JoinedClassId没有保存。我想这是因为我没有为JoinedClassId类保存数据库表。

我必须为JoinedClassId类创建数据库上下文和控制器吗?我不希望能够从API操作JoinedClassId类,我只是将其用作数据容器。有没有一种方法可以创建一个长列表并保存它,或者保存JoinedClassId?

在EF Core中"还不支持没有实体类来表示联接表的多对多关系";。书籍->类别有很多可以关联的表,所以这应该在DB中创建3个表:图书,类别和图书类别

public class Book
{
public int BookId { get; set; }
public string Title { get; set; }
//public ICollection<Category> Categories { get; set; } // cannot appear 
// For the many-to-many rel
public List<BookCategory> BookCategories { get; set; }
}
public class Category
{
public int CategoryId { get; set; }
public string CategoryName { get; set; }
//public ICollection<Book> Books { get; set; } // cannot appear 
// For the many-to-many rel
public List<BookCategory> BookCategories { get; set; }
}
// Class because of the many-to-many rel
public class BookCategory
{
public int BookId { get; set; }
public Book Book { get; set; }
public int CategoryId { get; set; }
public Category Category { get; set; }
}
public class MyContextDbContext : DbContext
{
public MyContextDbContext(DbContextOptions<MyContextDbContext> dbContextOptions)
: base(dbContextOptions)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<BookCategory>()
.HasKey(t => new { t.BookId, t.CategoryId });
modelBuilder.Entity<BookCategory>()
.HasOne(bctg => bctg.Book)
.WithMany(ctg => ctg.BookCategories)
.HasForeignKey(book => book.CategoryId);
modelBuilder.Entity<BookCategory>()
.HasOne(bctg => bctg.Category)
.WithMany(ctg => ctg.BookCategories)
.HasForeignKey(ctg => ctg.BookId);
}
public DbSet<Book> Book { get; set; }
public DbSet<Category> Category { get; set; }
}

相关内容

  • 没有找到相关文章

最新更新