【问题标题】:Get specific results from the database in .NET CORE从 .NET CORE 中的数据库获取特定结果
【发布时间】: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


【解决方案1】:

我认为您的主页应该改变:

@foreach (var item in Model.BookAuthors)
{
<span><a asp-controller="Author" asp-action="Details" asp-route- 
id="@item.AuthorId">@item.Name</a></span>
}

【讨论】:

    【解决方案2】:

    在视图组件中,您将遍历所有 Model.BookAuthors 并为它们中的每一个创建一个跨度。如果 Model.BookAuthors 有每个作者,就像看起来那样,那么将为每个作者创建一个跨度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-28
      • 1970-01-01
      • 2019-02-23
      • 2012-05-23
      相关资源
      最近更新 更多