![](/img/trans.png)
[英]Seeding the database with a many-to-many relationship using Entity Framework Core
[英]Using Lists with Many-to-Many relationship in 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類:public class MyDbContext:DbContext {public 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添加到要添加到數據庫中的電影感到困惑。 我所見過的所有示例並沒有真正解決我正在嘗試做的事情。 我正在嘗試將許多工作室添加到一部電影中。
正確的方法是:
// 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);
Movies
與Studios
之間many-to-many
關系分別相當於MovieStudios
(關系表)與Movies
與Studios
之間的兩個one-to-many
關系。
編輯:
您可以像這樣將電影添加到工作室:
public async Task AddMoviesToStudioAsync(List<Movie> movies, int studioId)
{
var movieStudiosList
= movies.Select(
movie => new MovieStudios
{
MovieId = movie.Id,
StudioId = studioId
})
.ToList();
await DbContext.Set<MovieStudios>().AddRangeAsync(movieStudiosList);
}
如果要在一部電影中添加許多工作室,則可以嘗試使用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));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.