【发布时间】:2018-10-13 07:02:29
【问题描述】:
我正在尝试在我的项目主页上显示随机书籍。 每本书都有一个或多个作者,但是当我迭代时,它会在主页上显示所有作者(当前在数据库中)。 你能帮我弄清楚吗。我想显示每本书的正确作者。
当我在路线中有一个 ID 时,它很容易并且可以工作,但我现在不知道要链接到什么,因为我在主页上没有任何 ID。
为此我使用了一个简单的 EF 核心代码
var book = await _appDbContext.Books
.Include(b => b.BookAuthors)
.ThenInclude(a => a.Author)
.AsNoTracking()
.SingleOrDefaultAsync(m => m.BookId == id);
现在解决问题:
我正在使用一个 ViewComponent,然后将其注入到我的主页中
@foreach (var item in Model.BookAuthors)
{
<span><a asp-controller="Author" asp-action="Details" asp-route-id="@item.AuthorId">@item.Author.Name</a></span>
}
但是,就像我说过的,现在它会遍历我数据库中的所有作者,并且不会连接到特定的书籍。
这是我的 BookslistViewComponent.cs
public class BooksListViewComponent : ViewComponent
{
private readonly ApplicationDbContext _appDbContext;
public BooksListViewComponent(ApplicationDbContext appDbContext)
{
_appDbContext = appDbContext;
}
public async Task<IViewComponentResult> InvokeAsync()
{
var randomBooksList = await GetRandomBooksAsync(3);
return View(randomBooksList);
}
private Task<List<Book>> GetRandomBooksAsync(int numBooks)
{
return _appDbContext.Books.OrderBy(r => Guid.NewGuid()).Take(numBooks)
.Include(b => b.BookAuthors)
.ThenInclude(a => a.Author)
.ToListAsync();
}
}
这是我的数据库:
【问题讨论】:
-
如果 ForeignKey 关系设置正确,请检查您的数据库。
标签: c# asp.net-core .net-core entity-framework-core ef-core-2.0