在Entity Framework Core中使用具有多对多关系的列表

时间:2018-10-10 04:02:32

标签: c# database asp.net-core-mvc many-to-many entity-framework-core

因此,我正在开发一个基础项目,该项目使用Entity Framework Core创建一个数据库,该数据库根据我输入的任何电影来从TMDB获取信息,以更好地理解整个事情。

在尝试在我的Movie和Studio模型之间实现多对多关系时,我已经停留了一段时间。

电影可以归因于许多电影制片厂,但也有许多电影将与电影制片厂建立联系,因此使用起来很明显。     以下是这些模型的摘要:

public class Movies
{
    [Key]
    public int MovieID { get; set; }
    public ICollection<MovieStudios> MovieStudios { get; set; } = new List<MovieStudios>();
}
public class Studios
{
    [Key]
    public int StudioID { get; set; }
    public ICollection<MovieStudios> MovieStudios { get; set; } = new List<MovieStudios>();
}

这是我拥有的联接表

public class MovieStudios
{
    public int MovieID { get; set; }
    public Movies Movie { get; set; }
    public int StudioID { get; set; }
    public Studios Studio { get; set; }
}

这是我的DbContext类:         公共类MyDbContext:DbContext     {         公共DbSet TblMovies {get;组; }         公共DbSet TblStudios {get;组; }

    protected override void OnConfiguring(DbContextOptionsBuilder option)
    {
        option.UseSqlServer(@"Server=(localdb)\MSSQLLocalDB; Database=ServerDatabase ; Trusted_Connection=True;");
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<MovieStudios>()
            .HasKey(bc => new { bc.MovieID, bc.StudioID });
    }
}

在我的一项服务中,我想做的就是返回列表,以便在将电影添加到数据库时可以将这些工作室链接到有问题的电影,但是我完全不知道该怎么做。做。很抱歉,如果这是一个菜鸟问题,或者如果时间太长,请感到完全迷茫!

编辑: 更具体地说,我将电影的TMDB ID传递给我创建的服务,该服务返回电影制作工作室ID的列表,例如('46226','6735'),然后将其保存在我的数据库,并返回我的Studio数据库的索引号,以便可以将其添加到我的电影中。 (“ 1”,“ 4”,“ 6”)。我已将其存储为列表,并且对如何将这些工作室ID添加到要添加到数据库中的电影感到困惑。我所见过的所有示例并没有真正解决我正在尝试做的事情。我正试图在一部电影中增加许多工作室。

2 个答案:

答案 0 :(得分:1)

正确的方法是:

// define composite key for MovieStudios
modelBuilder
    .Entity<MovieStudios>()
    .HasKey(ct => new {ct.MovieId, ct.StudioId});

// setup one-to-many relationship MovieStudios-Movies
modelBuilder.Entity<MovieStudios>()
    .HasOne(movieStudio => movieStudio.Movie)
    .WithMany(movie => movie.MovieStudios)
    .HasForeignKey(movieStudio => movieStudio.MovieId);

// setup one-to-many relationship MovieStudios-Studios
modelBuilder.Entity<MovieStudios>()
    .HasOne(movieStudio => movieStudio.Studio)
    .WithMany(studio => studio.MovieStudios)
    .HasForeignKey(movieStudio => movieStudio.StudioId);

many-to-manyMovies之间的Studios关系等效于one-to-many(关系表)与MovieStudios和{之间的两个Movies关系{1}}。

编辑:

您可以像这样将电影添加到演播室:

Studios

答案 1 :(得分:1)

如果要在一部电影中添加许多工作室,可以尝试使用for循环播放。

尝试执行下面显示的代码

public async Task<IActionResult> AddStudiosToMovie(int  movieID, List<int> studioIdList)
    {
       for(int i=0;i<studioIdList.Count();i++)
        {
            var movieToStudio = new MovieStudios
            {
                MovieID = movieID,
                StudioID = studioIdList[i]
            };
            _context.Add(movieToStudio);
            await _context.SaveChangesAsync();
        }

        return RedirectToAction(nameof(Index));

    }