C# 试图从数据库表中读取,但输出不正确
这是我的密码: tracks.cshtmlC# 试图从数据库表中读取,但输出不正确,c#,asp.net,entity-framework,asp.net-core,razor-pages,C#,Asp.net,Entity Framework,Asp.net Core,Razor Pages,这是我的密码: tracks.cshtml @page @using Project.Models @model Project.Pages.TracksModel @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers <div class="row"> <h1 class="display-2">Tracks</h1> <table class
@page
@using Project.Models
@model Project.Pages.TracksModel
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
<div class="row">
<h1 class="display-2">Tracks</h1>
<table class="table">
<thead class="thead-inverse">
<tr>
<th>Artist name</th>
<th>Album name</th>
<th>Track ID</th>
<th>Track name</th>
</tr>
</thead>
<tbody>
@foreach (Track track in Model.Tracks)
{
<tr>
<td>@Html.DisplayFor(modelArtists => track.Artist.Name)</td>
<td>@Html.DisplayFor(modelAlbums => track.Album.Title)</td>
<td>@track.TrackId</td>
<td>@track.Name</td>
<td><a asp-page="/Tracks/Details" asp-route-id="@track.TrackId">Details</a></td>
<td><a asp-page="/Tracks/Edit" asp-route-id="@track.TrackId">Edit</a></td>
<td><a asp-page="/Tracks/Delete" asp-route-id="@track.TrackId">Delete</a></td>
</tr>
}
</tbody>
</table>
</div>
<div class="row">
<p>Enter a name & TrackID (over 3510) for a new track: </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>
尽管如此,它仍然会导致完全相同的错误。关键点在于
Context.Chinook.cs
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
....
modelBuilder.Entity<Track>()
.ToTable("tracks")
.HasOne(mtype => mtype.Artist)
.WithMany(trk => trk.Tracks)
.HasForeignKey(mtype => mtype.AlbumId)
.HasForeignKey(mtype => mtype.GenreId)
.HasForeignKey(mtype => mtype.MediaTypeId)
.OnDelete(DeleteBehavior.NoAction);
}
WebApp.tracks.cshtml.cs
public void OnGetAsync()
{
ViewData["Title"] = "Chinook Web Site - Tracks";
Tracks = db.Tracks
.Include(a => a.Album)
.ThenInclude(a => a.Artist);
}
WebApp.tracks.cshtml
<tbody>
@foreach (Track track in Model.Tracks)
{
<tr>
<td>@Html.DisplayFor(modelArtists => track.Album.Artist.Name)</td>
<td>@Html.DisplayFor(modelAlbums => track.Album.Title)</td>
<td>@track.TrackId</td>
<td>@track.Name</td>
<td><a asp-page="/Tracks/Details" asp-route-id="@track.TrackId">Details</a></td>
<td><a asp-page="/Tracks/Edit" asp-route-id="@track.TrackId">Edit</a></td>
<td><a asp-page="/Tracks/Delete" asp-route-id="@track.TrackId">Delete</a></td>
</tr>
}
</tbody>
@foreach(Model.Tracks中的轨迹)
{
@DisplayFor(modelArtists=>track.Album.Artister.Name)
@DisplayFor(modelAlbums=>track.Album.Title)
@track.TrackId
@音轨,名字
也许你可以提供静态html结果来检查错误。对不起,我真的不明白你的意思。但是如果你看这个屏幕截图,也许你会发现AC/DC发布的版本太多了。这是不正确的。艺术家的名字不知何故被错误地重复了。你验证过外国k吗ey在DB中是正确的?因为它看起来像Aerosmith也是ACDC。或者在进入循环之前,您是否调试过它并验证了它的正确性?抱歉,我不太确定您的意思?我可以在我的网站的其他页面上很好地显示艺术家的名字,这只是我遇到这个问题的一个页面。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Album>()
.ToTable("albums")
.HasOne(al => al.Artist)
.WithMany(ar => ar.Albums)
.HasForeignKey(al => al.ArtistId);
modelBuilder.Entity<Artist>().ToTable("artists");
modelBuilder.Entity<Media_type>()
.ToTable("media_types")
.HasKey(c => c.MediaTypeId);
modelBuilder.Entity<Genre>().ToTable("genres");
modelBuilder.Entity<Track>()
.ToTable("tracks")
.HasOne(trk => trk.Album)
.WithMany(trk => trk.Tracks)
.HasForeignKey(trk => trk.AlbumId)
.OnDelete(DeleteBehavior.NoAction);
modelBuilder.Entity<Track>()
.ToTable("tracks")
.HasOne(trk => trk.Genre)
.WithMany(trk => trk.Tracks)
.HasForeignKey(trk => trk.GenreId);
modelBuilder.Entity<Track>()
.ToTable("tracks")
.HasOne(trk => trk.Media_type)
.WithMany(trk => trk.Tracks)
.HasForeignKey(mtype => mtype.MediaTypeId);
}
public class Artist
{
public int ArtistId { get; set; }
public string Name { get; set; }
public ICollection<Album> Albums { get; set; }
}
public class Genre
{
public int GenreId { get; set; }
public string Name { get; set; }
public ICollection<Track> Tracks { get; set; }
}
public class Media_type
{
public int MediaTypeId { get; set; }
public string Name { get; set; }
public ICollection<Track> Tracks { get; set; }
}
public class Track
{
public int TrackId { get; set; }
public string Name { get; set; }
public int? AlbumId { get; set; }
public int? MediaTypeId { get; set; }
public int? GenreId { get; set; }
public string Composer { get; set; }
public int? Milliseconds { get; set; }
public int? Bytes { get; set; }
public int? UnitPrice { get; set; }
public Album Album { get; set; }
public Genre Genre { get; set; }
public Media_type Media_type { get; set;}
}
public void OnGetAsync()
{
ViewData["Title"] = "Chinook Web Site - Tracks";
Tracks = db.Tracks
.Include(a => a.Album)
.ThenInclude(a => a.Artist);
}
<tbody>
@foreach (Track track in Model.Tracks)
{
<tr>
<td>@Html.DisplayFor(modelArtists => track.Album.Artist.Name)</td>
<td>@Html.DisplayFor(modelAlbums => track.Album.Title)</td>
<td>@track.TrackId</td>
<td>@track.Name</td>
<td><a asp-page="/Tracks/Details" asp-route-id="@track.TrackId">Details</a></td>
<td><a asp-page="/Tracks/Edit" asp-route-id="@track.TrackId">Edit</a></td>
<td><a asp-page="/Tracks/Delete" asp-route-id="@track.TrackId">Delete</a></td>
</tr>
}
</tbody>