2011-09-25 74 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