我试图通过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();
}
答案 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将创建链接实体和链接表条目。