MVC MusicStoreを通してMVCを学習しながら頭を悩ましています。 Details ViewのModel.Artist.Nameにこのエラーがあります。MVC MusicStore Artist.Nameオブジェクトのリファレンスがオブジェクトのインスタンスに設定されていません
私のStorecontroller詳細メソッドは正常です。
public ActionResult Details(int id)
{
//returns and albums searched from the id
var albums = storeDB.Albums.Find(id);
return View(albums);
}
そして、これは、価格のためにどのようにI出力ビュー
<li>Price : <%=Model.Price %></li>
<li>Artist : <%=Model.Artist.Name%></li>
作品結構です、そしてそれが唯一のModel.Genre.NameとArtist.Nameのエラーが表示されます。私はこの問題に
Artist = artists.Single(a => a.Name == "Aaron Copland & London Symphony Orchestra")
を引き起こした。しかし、この私の知識は何かを作るには弱すぎるsampledata.csでこれらのプロパティの宣言を疑っています。助けてください 。
さてさて、値は値が割り当てられている方法で、この
protected override void Seed(MusicStoreEntities context)
{
var artists = new List<Artist>
{
new Artist { Name = "Aaron Copland & London Symphony Orchestra" },
etcetc
}
new List<Album>
{
new Album { Title = "ABC", Artist= artists.Single(g => g.Name == "Test")}
}
}
テイク予告のように見えるクラスファイルからフェッチされ、私はModel.Title罰金(短い手としてモデル)にアクセスすることができ、 Model.Artist.Nameは私にそのエラーを引き起こしました。
は、よし
を解決し、それがアルバムのクラスのアーティストやジャンル宣言に仮想キーワードを追加することで動作するようになりました。しかし、私はまだ何が起こっているか分かりませんし、誰かに光を当てたいと思ってもらいたいと思います。私のアルバムのクラスで
、それは
public virtual Artist Artist { get; set; }
どういうわけか、仮想キーワードを追加することによって、私はまだ「couldn解かれるジャンルやアーティストによって引き起こされるこの
public class Album
{
public int AlbumId { get; set; }
public int GenreId { get; set; }
public int ArtistId { get; set; }
public string Title { get; set; }
public decimal Price { get; set; }
public string AlbumArtUrl { get; set; }
public Genre Genre { get; set; }
public Artist Artist { get; set; }
}
エラーのように見える解決される前に、起こることを正当化し、もっと学びたいと思う。誰でも気をつけて説明しますか?
それはEF MusicStore.cs StoreController.cs
MusicStoreEntities storeDB = new MusicStoreEntities();
public ActionResult Details(int id)
{
//returns and albums searched from the id
var albums = storeDB.Albums.Find(id);
return View(albums);
}
最後にサンプルデータ
でnamespace MvcMusicStore.Models
{
//represent entity framework , handle create ,read , update and del ops
public class MusicStoreEntities : DbContext
{
public DbSet<Album> Albums { get; set; }
public DbSet<Genre> Genres { get; set; }
public DbSet<Artist> Artists { get; set; }
}
}
と実装を使用して
namespace MvcMusicStore.Models
{
public class Album
{
public int AlbumId { get; set; }
public int GenreId { get; set; }
public int ArtistId { get; set; }
public string Title { get; set; }
public virtual Genre Genre { get; set; }
public virtual Artist Artist { get; set; }
}
}
Album.cs
、このように書きますprotected override void Seed(MusicStoreEntities context)
{
var artists = new List<Artist>
{
new Artist { Name = "Aaron Copland & London Symphony Orchestra" },
etcetc
}
new List<Album>
{
new Album { Title = "ABC", Artist= artists.Single(g => g.Name == "Test")}
}
}
デバッグ - リターン・ビュー(アルバム)のステートメントで停止。アルバムはどのように見えますか?それはアーティストとジャンルの価値がありますか? – BonyT
はい、ありますが、値はデータベースを表すと思われるクラスからフェッチされます。 – user777310
もっとコードを投稿する必要があります。投稿した内容に何も問題はなく、デバッグ時にalbums.Artist.Nameがポップアップされている場合は、エラーを報告しないでください。アルバムクラスはどのように見えますか?アルバムはどうですか? – BonyT