为什么“艺术家”表和链接表“ArtistAlbums”没有填充

时间:2015-10-05 17:07:31

标签: entity-framework

我试图通过EF代码第一种方法与链接表实现多对多的关系。

类和上下文类在下面,

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();
        }

1 个答案:

答案 0 :(得分:1)

而不是

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

使用

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

问题是只有专辑&#39;对象已添加到上下文中。本地专辑&#39; object没有对Artist对象的引用,因此EF不会创建链接的实体。

注:

您也可以替换

context.Albums.Add(album);

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

这些本地对象确实有引用,因此EF将创建链接实体和链接表条目。