2015-10-05 36 views
0

我试图通过EF代码第一种方法实现多对多的关系与链接表。为什么“艺术家”表和链接表“ArtistAlbums”没有填充

类和上下文类是下面,

public class Album 
{ 
    public Album() 
    { 
     Artists = new List<Artist>(); 
    } 
    public int AlbumId { get; set; } 
    public string AlbumName { get; set; } 

    public List<Artist> Artists { get; set; } 
} 

public class Artist 
{ 
    public Artist() 
    { 
     Albums = new List<Album>(); 
    } 
    public int ArtistId { get; set; } 
    public string FirstName { get; set; } 
    public string MiddleName { get; set; } 
    public string LastName { get; set; } 

    public List<Album> Albums { get; set; } 
} 

public class ContextClass : DbContext 
{ 
    public DbSet<Album> Albums { get; set; } 
    public DbSet<Artist> Artists { get; set; } 
} 

虽然我尝试添加专辑两位艺术家,然后填充数据只在“专辑”表,但没有在其他表中的可用数据“艺术家“并在链接表中,请建议?

using (var context = new ContextClass()) 
     { 
      // add an album for two artists 
      var artist1 = new Artist { FirstName = "Tobby", LastName = "Keith" }; 
      var artist2 = new Artist { FirstName = "Merle", LastName = "Haggard" }; 
      var album = new Album { AlbumName = "Honkytonk University" }; 
      artist1.Albums.Add(album); 
      artist2.Albums.Add(album); 
      context.Albums.Add(album); 
      context.SaveChanges(); 
     } 
+0

你试过用'album.Artists.Add(artist1); album.Artists.Add(artist2);'而不是? – Vlad274

+0

这是有效的。哇!但有什么区别? – user584018

+0

将专辑添加到艺术家时,您可以从“艺术家” - >“专辑”创建链接。然后,将专辑对象添加到上下文。专辑对象没有链接,所以EF不做任何事情。你也可以改变代码到'context.Artists.Add(artist1); context.Artists.Add(artist2);'和EF会看到链接并创建专辑 – Vlad274

回答

1

而不是

artist1.Albums.Add(album); 
artist2.Albums.Add(album); 

使用

album.Artists.Add(artist1); 
album.Artists.Add(artist2); 

的问题是,只有 '专辑' 对象已被添加到背景。本地“专辑”对象没有对艺术家对象的引用,因此EF不会创建链接的实体。

注:

您也可以与

context.Artists.Add(artist1); 
context.Artists.Add(artist2); 

这些本地对象确实有引用替换

context.Albums.Add(album); 

,因此EF将创建链接的实体和连接表项。

相关问题