我正在尝试学习ASP.NET MVC 5,但我一开始就陷入困境:)我有简单的数据库
dbo.Books
(int Id(PK),nvarchar(50)Title,int Author(foreignkey))dbo.Author
(int ID(PK),nvarchar(50)Name)我正在尝试使用Entity Framework显示书籍列表。我的模型看起来像:
public class Author
{
public int ID { get; set; }
public string Name { get; set; }
public IEnumerable<Book> Books { get; set; }
}
public class MovieContext :DbContext
{
public DbSet<Books> Books{ get; set; }
public DbSet<Author> Authors { get; set; }
}
public class Book
{
public int Id { get; set; }
public int Author { get; set; }
public string Title { get; set; }
[ForeignKey("Author")]
public virtual Author Authorr { get; set; }
}
当我转到BooksController/index
时,它显示了一个书籍列表,但它显示的是ID而不是作者姓名。我试图改变代码
@Html.DisplayFor(modelItem => item.Author)
为此:
@Html.DisplayFor(modelItem => item.Authorr.Name)
在Index.cshtml类
中但是现在我收到了一个错误:
无效的对象名称dbo.Authors。
我的表名为Author
,我不知道为什么会找Authors
。
我应该更改哪些内容才能显示普通名称,而不是Author
?
答案 0 :(得分:0)
将您的forign键列更改为AuthorId,并将forign键导航属性从Authorr
更改为Author
public class Book
{
public int Id { get; set; }
public int AuthorId { get; set; }
public string Title { get; set; }
public virtual Author Author { get; set; }
}
现在在你看来你可以做到
@Html.DisplayFor(modelItem => item.Author.Name)
同样,当您获得数据时,您可以使用Include
方法加载作者数据。
var books = yourDbContext.Books.Include("Author").ToList();
return View(books);
答案 1 :(得分:0)
共有4个问题。
1问题在这里:
dbo.Books (int Id(PK),
nvarchar(50) Title,
int Author(foreignkey) //Wrong)
应该是
dbo.Books (int Id(PK),
nvarchar(50) Title,
int AuthorId)
1问题在这里:
dbo.Author //Wrong
(int ID(PK), nvarchar(50) Name)
应该是
dbo.Authors (int ID(PK), nvarchar(50) Name)
2问题在这里:
public class Book
{
public int Id { get; set; }
public int Author { get; set; } //Wrong
public string Title { get; set; }
[ForeignKey("Author")]
public virtual Author Authorr { get; set; } //Wrong
}
您应该如下所示进行更改。
public class Book
{
public int Id { get; set; }
public string Title { get; set; }
[ForeignKey("Author")]
public virtual Author Author { get; set; }
public int AuthorId { get; set; }
}
我强烈建议您按照Getting Started with ASP.NET MVC 5文章系列学习 ASP.net MVC 5 。