我是ASP.NET的新手,正在学习MVC和EF。我没有任何现有的答案可以解决我的问题,请提供帮助。使用代码优先。
我得到一个错误: Error 这是Controller中Action方法的代码:
public ActionResult Index()
{
var book = _context.Books.Include(b => b.Genre).ToList();
return View(book);
}
这是Book.cs模型:
public class Book
{
public int Id { get; set; }
[Required]
[StringLength(255)]
public string Name { get; set; }
[Required]
[StringLength(17)]
public string ISBN { get; set; }
[Required]
public string Author { get; set; }
[Required]
public string Publisher { get; set; }
public Genre Genre { get; set; }
[Required]
[Display(Name = "Genre")]
public byte GenreId { get; set; }
[Display(Name = "Published Year")]
public DateTime PublishedYear { get; set; }
[Display(Name = "Release Date")]
public DateTime ReleaseDate { get; set; }
[Display(Name = "Number in Stock")]
[Range(1, 20, ErrorMessage = "The field Number in Stock must be between 1 and 20")]
public byte NumberInStock { get; set; }
以下是DbSet:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public DbSet<Customer> Customers { get; set; }
public DbSet<Book> Books { get; set; }
public DbSet<MembershipType> MembershipTypes { get; set; }
public DbSet<Genre> Genres { get; set; }
这是表格: Columns in table
因此,当我调试项目时,这里是例外: 错误=函数评估要求所有线程都运行。 Debug
答案 0 :(得分:0)
Book
和Genre
之间的关系问题。请阅读this文章。
Genre
类中的导航属性(Book
)返回对Genre
对象的引用。另一方面,Genre
类中的导航属性返回{ {1}}集合。
books
模型在book
表中创建了外键Genre_Id
。您可以将book
包含在相关类(foreign Key Property
)中。
使用数据注释的一对多关系:
Book
使用Fluent API进行一对多的关系:
[ForeignKey("GenreId ")]
public Genre Genre { get; set; }
[Required]
[Display(Name = "Genre")]
public byte GenreId { get; set; }
通过modelBuilder.Entity<Book>()
.HasRequired(e => e.Genre)
.WithMany(d => d.books);
中的OnModelCreating
方法添加此内容。
,还为{strong>一对多关系(如果未添加)在ApplicationDbContext
类的下面添加行:
Genre
答案 1 :(得分:-1)
将以下注释添加到public Genre Genre { get; set; }
[ForeignKey("Genre_Id")]
这应该有所帮助,因为EF在数据库中生成了错误的外键名称。 通过添加注释,您可以告诉EF数据库中列的命名方式。