2014-09-28 59 views
0

我有兩個類SongAlbumAlbum具有嵌套的歌曲集合。但在EF中,我必須建立關係。但Song可以是單個或沒有Album。所以我想在數據庫中創建類似的東西。在實體框架中定義集合而不創建關係

public class Song:IEntity 
{ 
    public Song() 
    { 
     Id = Guid.NewGuid().ToString(); 
    } 
    public string Id { get; set; } 
    public string Artist { get; set; } 
    public string Title { get; set; } 

}

public class Album:IEntity 
{ 
    public Album() 
    { 
     Id = Guid.NewGuid().ToString(); 
    } 
    public string Id { get; set; } 
    public string Artist { get; set; } 
    public string Title { get; set; } 
    public DateTime Year { get; set; } 
    public virtual ICollection<Song> Songs { get; set; } 
} 
+0

你沒有一個主鍵。 Id屬性每次都是一個新字符串。 – LiverpoolsNumber9 2014-09-28 12:21:52

+0

不確定爲什麼你會把字符串當作關鍵字? – 2014-09-28 13:26:37

回答

0

更新您的Song類:

public class Song:IEntity 
{ 
    public Song() 
    { 
     Id = Guid.NewGuid().ToString(); 
    } 
    public virtual Album Album { get; set; }. //add this line 
    public string Id { get; set; } 
    public string Artist { get; set; } 
    public string Title { get; set; } 
} 

,並定義以下映射在你DbContext

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Song>() 
      .HasOptional(c => c.Album) 
      .WithMany(t => t.Songs); 
} 
+0

不應該是虛擬的專輯嗎?也可能不是modelBuilder.Entity ().HasOptional(c => c.Album).WithMany(t => tSong) – 2014-09-28 15:33:32

+0

@kirsteng:如果你想使用延遲加載,它應該是虛擬的。 – Masoud 2014-09-28 15:35:24

+0

@ kirsteng:是的,你是對的,我更新了答案。 – Masoud 2014-09-28 15:42:24

0

好的,什麼是不工作?你的模型看起來很好,除了讓你無法檢查宋是否是任何專輯的一部分。

許多許多nad一對多關係被翻譯成單獨的表,直到你添加某些實例之間的關係,你不會失去任何內存。是否有任何理由不添加:public Album Album {get;set;}Album,有類似null的東西你知道嗎?