0

私は長い間 Web フォームの専門家でしたが、ASP.NET MVC プログラミングに移行する時が来たと思います。

MVC の研究中に、音楽ストアを作成するこの例に出くわしました。事前定義されたデータをデータベースに入力する必要があるセクション 4 までは、すべて問題ありませんでした。それを達成しようとしていたとき、私は問題を抱えていました。どうやら問題は、プロパティとして Author および Genre 型を持つ Album Model オブジェクトを、Entity Framework Code-first アプローチを使用して localDB に書き込もうとしたときに発生したようです。

http://www.asp.net/mvc/tutorials/mvc-music-store/mvc-music-store-part-4

Album クラス構造に問題があるようです。チュートリアルの Album クラスには 2 つの複雑な型があります。

public Genre    Genre       { get; set; }
public Artist   Artist      { get; set; }

以下のように dbcontext に記録しようとしても、何も起こりません。データは書き込まれません:(SampleData.cs のコード)

var albums = new List<Album>
{
new Album { Title = "Worlds", Genre = genres.Single(g => g.Name == "Rock"), Price = 8.99M,Artist = artists.Single(a => a.Name == "Accept"),BookArtUrl = "/Content/Images/placeholder.gif" 
}
};
foreach (var al in albums)
{
  context.Albums.Add(al);
}

しかし、Album クラスの複合型を文字列に変更すると、次のようになります。

public string    Genre       { get; set; }
public string   Artist      { get; set; }

以下のように記録できます:(SampleData.csのコード)

var albums = new List<Album>
{
new Album { Title = "Worlds", Genre = (genres.Single(g => g.Name == "Rock")).ToString(), Price = 8.99M,Artist = (artists.Single(a => a.Name == "Accept")).ToString(),BookArtUrl = "/Content/Images/placeholder.gif" 
}
};
foreach (var al in albums)
{
  context.Albums.Add(al);
}

チュートリアルではなぜ機能したのかわかりませんが、私の演習では機能しませんでした。

どんな助けでも大歓迎です。

4

1 に答える 1

0

オブジェクト プロパティを仮想化してみてください (EF Code First でオーバーライドできるようにします)。

public virtual Genre    Genre       { get; set; }
public virtual Artist   Artist      { get; set; }

GenreID および ArtistID 外部キー フィールドを暗黙的に追加し、子エンティティへのリンクを手動で設定することもできます (属性を使用)。

public int GenreID {get; set;} 
public int ArtistID {get; set;} 

[ForeignKey("GenreID")]
public virtual Genre    Genre       { get; set; }

[ForeignKey("ArtistID")]
public virtual Artist   Artist      { get; set; }
于 2013-10-18T12:55:33.747 に答える