0

我很长时间以来一直是 webforms 人,但我认为是时候转向 ASP.NET MVC 编程了。

在我学习 MVC 期间,我遇到了这个创建音乐商店的例子。一切都很好,直到第 4 节,您需要用一些预定义的数据填充数据库。当我试图实现这一目标时,我遇到了问题。显然,问题出在尝试使用实体框架代码优先方法将具有 Author 和 Genre 类型作为属性的专辑模型对象写入 localDB 时。

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

好像我的专辑类结构有问题。在教程中,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 回答