Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在我的网站中联接数据库表?_C#_Asp.net_Entity Framework_Asp.net Core_Razor Pages - Fatal编程技术网

C# 如何在我的网站中联接数据库表?

C# 如何在我的网站中联接数据库表?,c#,asp.net,entity-framework,asp.net-core,razor-pages,C#,Asp.net,Entity Framework,Asp.net Core,Razor Pages,这是我的密码: albums.cshtml @page @using Project.Models @model Project.Pages.AlbumsModel @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers <div class="row"> <h1 class="display-2">Albums</h1> <table class

这是我的密码:

albums.cshtml

@page
@using Project.Models
@model Project.Pages.AlbumsModel
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

<div class="row">
    <h1 class="display-2">Albums</h1>
    <table class="table">
        <thead class="thead-inverse">
            <tr>
                <th>Album ID</th>
                <th>Artist ID</th>
                <th>Artist name</th>
                <th>Album title</th>
                <th></th>
                <th></th>
            </tr>
        </thead>

        <tbody>
            @foreach (Album album in Model.Albums)
            {
                <tr>
                    <td>@album.AlbumId</td>
                    <td>@album.ArtistId</td>
                    <td>@Html.DisplayFor(modelArtists => album.Artist.Name)</td>
                    <td>@album.Title</td>
                    <td><a asp-page="/Albums/Details" asp-route-id="@album.AlbumId">Details</a></td>
                    <td><a asp-page="/Albums/Edit" asp-route-id="@album.AlbumId">Edit</a></td>
                    <td><a asp-page="/Albums/Delete" asp-route-id="@album.AlbumId">Delete</a></td>   
                    <td><a asp-page="/Albums/AlbumTracks" asp-route-id="@album.AlbumId">Tracks</a></td>       
                </tr>
            }
        </tbody>
    </table>
</div>
<div class="row">
    <p>Enter a title & ArtistID for a new album:&nbsp;</p>
    <form method="POST">
        <div><input asp-for="Album.Title" /></div>
        <div><input asp-for="Album.ArtistId" /></div>
        <input type="submit" />
    </form>
</div>
<div>
    <a asp-page="/Index">Home</a>
</div>
@page
@using Project.Models
@model Project.Pages.AlbumTracksModel
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

<div class="row">
    <h1 class="display-2">Tracks</h1>
    <table class="table">
        <thead class="thead-inverse">
            <tr>
                <th>Track name</th>
                <th></th>
                <th></th>
                <th></th>
                <th></th>
            </tr>
        </thead>

        <tbody>
            @foreach (Track track in Model.Tracks)
            {
                <tr>
                    <td>@track.TrackId</td>
                    <td>@track.Name</td>
                </tr>
            }
        </tbody>
    </table>
</div>
@* <div class="row">
    <p>Enter a name & TrackID for a new track:&nbsp;</p>
    <form method="POST">
        <div><input asp-for="Track.Name" /></div>
        <div><input asp-for="Track.TrackId" /></div>
        <input type="submit" />
    </form>
</div> *@
<div>
    <a asp-page="/Index">Home</a>
</div>
有什么建议吗?蒂亚

编辑:

可以尝试:

foreach (var track in Model.Tracks)
{
    if(item.AlbumID == Model.AlbumID)
    {
         <tr>
              <td>@track.TrackId</td>
              <td>@track.Name</td>
         </tr> 
    }
}
我对这个还是有点陌生,所以希望它能起作用

目前,我正在AlbumTracks.cshtml中显示每个相册中的所有曲目,而不仅仅是用户在album.cshtml上选择的曲目

你确定你所描述的是正确的吗?使用以下代码显示所有相册中的所有曲目:

Tracks = db.Tracks.Include(a => a.Album);
我认为您需要的是,当单击
albums.cshtml
中的
tracks
链接时,可以显示所选专辑的曲目:

<td><a asp-page="/Albums/Album Tracks" asp-route-id="@album.AlbumId">Tracks</a></td>
AlbumTracks.cshtml:

@page
@using Project.Models
@model Project.Pages.AlbumTracksModel
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

<div class="row">
    <h1 class="display-2">Tracks</h1>
    <table class="table">
        <thead class="thead-inverse">
            <tr>
                <th>Track name</th>
                <th></th>
                <th></th>
                <th></th>
                <th></th>
            </tr>
        </thead>

        <tbody>
            @foreach (Track track in Model.Tracks)
            {
                <tr>
                    <td>@track.TrackId</td>
                    <td>@track.Name</td>
                </tr>
            }
        </tbody>
    </table>
</div>
@page
@使用Project.Models
@模型Project.Pages.AlbumTracksModel
@addTagHelper*,Microsoft.AspNetCore.Mvc.TagHelpers
轨道
音轨名称
@foreach(Model.Tracks中的轨迹)
{
@track.TrackId
@音轨,名字
}
结果:


谢谢,但由于某些原因,我出现了错误“当前上下文中不存在名称“track”。你说的模型是指实体文件吗?Album.cs和Track.cs?或者上下文文件Chinook.cs?我又试了一次,但这一次我得到的“名称”项“在当前上下文中不存在”&“AlbumTracksModel”不包含“AlbumId”的定义,并且找不到可访问的扩展方法“AlbumId”,该扩展方法接受类型为“AlbumTracksModel”的第一个参数“您是否可以发布到github repo或源代码的链接?”?我的意思是将Id添加到album.cs和AlbumId添加到Track.cs。然后在PackageManager控制台中执行:添加迁移和更新数据库。这将向数据库中添加列,然后清空数据库并用新的测试数据填充,并通过将每个曲目的AlbumId设置为相册的相应Id将曲目与其相册链接,让我知道这是否有助于GitHub repo位于。需要说明的是,
AlbumId
已经作为Album表的主键和Tracks表的外键存在,因此我几乎完全确定不需要对数据库做任何进一步的操作。现在我正在使用
Tracks=db.Tracks.Where(a=>a.AlbumId==id)来“拉”我需要的数据。我认为这是正确的,因为登录页使用
id
作为参数。但是我怎样才能让这些曲目真正显示在AlbumTracks.cshtml页面上呢?谢谢,但这里有一件或多件事情我还不太清楚。IDK你所说的“你确定你所描述的是正确的吗?”AlbumTracks.cshtml页面明确地显示了所有相册中的所有曲目。我已经用
Tracks=db.Tracks.Where(a=>a.AlbumId==id)更新了AlbumTracks.cshtml.cs。这就是表连接,对吗??但是现在我如何获得所选唱片集的曲目列表以实际显示在AlbumTracks.cshtml上?我不知道该用什么语法。这就是表格连接。你不知道使用什么语法是什么意思?只需使用
Tracks=db.Tracks.Where(a=>a.AlbumId==id).Include(a=>a.Album)在后端已经足够了。您的客户端使用:
@foreach(Model.Tracks中的Track)
<代码>曲目
此处匹配后端
曲目
。也就是说,它将读取后端数据并将其显示在AlbumTracks.cshtml中。你在项目中尝试过吗?我已经更新了AlbumTracks.cshtml。实际上它和你的一样。我想你可能没有时间在你的项目中测试我的代码。啊,太棒了,非常感谢。一开始我没有看到Tracks=db.Tracks.Include(a=>a.Album.Where(a=>a.AlbumId==id)的区别。我以为我的版本也在做同样的事情,但由于某种原因我不明白它显然不是。再次感谢。
Tracks = db.Tracks.Include(a => a.Album);
<td><a asp-page="/Albums/Album Tracks" asp-route-id="@album.AlbumId">Tracks</a></td>
public class AlbumTracksModel : PageModel
{
    private Chinook db;

    public AlbumTracksModel(Chinook injectedContext)
    {
        db = injectedContext;
    }
    public IEnumerable<Track> Tracks { get; set; }

    public void OnGetAsync(int id)
    {
        ViewData["Title"] = "Chinook Web Site - Tracks";
        Tracks = db.Tracks.Include(a => a.Album).Where(a=>a.AlbumId==id);
    }
}
@page
@using Project.Models
@model Project.Pages.AlbumTracksModel
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

<div class="row">
    <h1 class="display-2">Tracks</h1>
    <table class="table">
        <thead class="thead-inverse">
            <tr>
                <th>Track name</th>
                <th></th>
                <th></th>
                <th></th>
                <th></th>
            </tr>
        </thead>

        <tbody>
            @foreach (Track track in Model.Tracks)
            {
                <tr>
                    <td>@track.TrackId</td>
                    <td>@track.Name</td>
                </tr>
            }
        </tbody>
    </table>
</div>