Я пытаюсь отобразить случайные книги на главной странице моего проекта.
У каждой книги есть один или несколько авторов, но когда я повторяюсь, она показывает всех авторов (в настоящее время в базе данных) на главной странице.
Не могли бы вы помочь мне понять это. Я хочу показать правильных авторов для каждой книги.
Когда у меня есть идентификатор в маршруте, это легко, и это работает, но я не знаю, на что ссылаться, так как у меня нет идентификатора на домашней странице.
Вот правильный индивидуальный результат
для которого я использовал простой код ядра 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();
}
}
Вот моя база данных: