2011-09-25 121 views
0

(ASP.net MVC 3.0剃刀,EF代码第一次)ASP.net实体框架(基本)问题

我的第一个问题是:我在哪里存储我的数据?在初始化程序或.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(); 

当绿色箭头是,就是这个问题。 我试图通过上面的列表索引(我将艺术家加载到数据库中)得到艺术家,但是当我测试它(item.Artist.Name)时,我什么也没得到。艺术家的财产是空的!我不明白。为什么?我甚至做得对吗? (我试图让艺术家的名字,这就是全部)

而最后一个问题: 我也在作者的课堂上有一个List(他的歌曲列表)。我应该如何加载他的歌曲?

回答

1

你是什么意思?存储您的数据?您的数据通常保存在您在connectionString中选择的数据库中。初始化将数据库创建的照顾,播种等

选择一首与他的艺术家

您可以通过他在查询得到的艺术家。例如:

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()。如果您使用“我的”方法,则只需保存一次。你真的应该检查一些实体框架的教程,谷歌是你的朋友:)

+0

非常感谢,所以。你能否指我在哪里可以了解有关查询?我不知道这是什么意思 编辑:你能解释为什么我试图做的没有用吗? – MasterMastic

+1

这是因为您刚刚在var列表中使用了Artist,而不是在数据库中。您可以从数据库中取回歌手并将其用在歌曲中,或者从数据库中获取歌手,并将歌曲添加到歌曲列表中。如果你想了解mvc和实体框架,我建议你从音乐商店教程开始,它会给你一个很好的看看@基础http://www.asp.net/mvc/samples/mvc-music-store –

+0

为什么它没有将它保存在数据库中?它在那里。 – MasterMastic