(ASP.net MVC 3.0 Razor,EF Code First)
我的第一个问题是:我在哪里存储数据?在初始化程序或.sdf?
我的第二个问题是: 我有一个歌曲课程,一个艺术家课程。
这来自我的初始化程序:
var Artists= new List<Artist>()
{
new Artist{ Name = "ArtistName", Birthday=DateTime.Parse("4-4-1988")}
};
Authors.ForEach(s => context.Authors.Add(s));
context.SaveChanges();
var Songs= new List<Song>()
{
new Song { Name="SongName", Genre = Genre.GenreTypes.Rock, Artist=Artists[0]} //<--
};
Books.ForEach(s => context.Books.Add(s));
context.SaveChanges();
绿色箭头在哪里,是问题所在。 我试图通过上面的list-index(我将艺术家加载到数据库中)来获取艺术家,但是当我测试它时(item.Artist.Name),我什么也得不到。艺术家属性为空!我不明白。为什么?我甚至做得对吗? (我正试图获得艺术家的名字,就是这样)
最后一个问题: 我在作者班上也有一个List(他的歌曲列表)。我应该如何加载他的歌曲?
答案 0 :(得分:1)
用他的艺术家选择一首歌
您可以通过将他包含在查询中来获取艺术家。例如:
yourContext.Songs.Include("Artist").toList()'
这将返回所有歌曲,并为每首歌曲填写艺术家。
用他的艺术家选择一首歌
以同样的方式为歌曲填写艺术家。
yourContext.Artists.Include("ListPropertyName").toList()
以下链接可能会对您有所帮助:
http://msdn.microsoft.com/en-us/library/bb896272.aspx
与他的艺术家一起保存一首歌。
我要展示我的工作方式,你的关系应该是这样的:
public class Artist
{
[Key]
public Guid ID { get; set; }
//..OtherProperties ...
public virtual ICollection<Songs> Songs { get; set; }
}
public class Song
{
[Key]
public Guid ID { get; set; }
//..OtherProperties ...
//Foreign Key Stuff
[ForeignKey("Artist")]
public Guid ArtistId { get; set; }
//Relationship
public virtual Artist Artist { get; set; }
}
如果你这样工作,你可以在歌曲中手动填写ArtistId。 所以你必须做以下事情:
var Artists= new List<Artist>()
{
new Artist{ Name = "ArtistName", Birthday=DateTime.Parse("4-4-1988"), ID = Guid.NewGuid()}
};
Authors.ForEach(s => context.Authors.Add(s));
var Songs= new List<Song>()
{
new Song { Name="SongName", Genre = Genre.GenreTypes.Rock, ArtistId=Artists[0].ID} //<--
};
Songs.ForEach(s => context.Songs.Add(s));
context.SaveChanges();
现在,分离ID和实际艺术家的进步是什么。这很简单,当你创建一个艺术家时,你可以手动设置ID,你可以在以后的代码中使用它,而不是先保存艺术家。首先,你制作你的艺术家并设置Id,然后你可以直接在你的歌曲中使用它。在您的示例中,您实际上执行了两次Savechanges()。如果您使用的是“我的”方法,则只需保存一次。你应该检查实体框架上的一些教程,谷歌是你的朋友:)