public async Task <Movie> MapMovieDtoToMovie(MovieDto dto) { var createdMovie = new Movie { MovieId = dto.MovieId, Title = dto.Title, Plot = dto.Plot, AgeRating = dto.AgeRating, ReleaseDate = dto.ReleaseDate, Duration = dto.Duration, TrailerUrl = ReturnTrailerUrl(dto.TrailerUrl) }; var genreList = new List <MovieGenre>(); foreach (Genre g in dto.Genres) { var genreToAdd = await _genreRepo.FindByNameAsync(g.Name); genreList.Add(new MovieGenre { Movie = createdMovie, // Look if the genre with the same name is in db, if not create a new genre Genre = genreToAdd != null ? genreToAdd : new Genre { Name = g.Name.Trim() } }); } createdMovie.GenresLink = genreList; var writersList = new List <MovieWriter>(); foreach (Writer w in dto.Writers) { var writerToAdd = await _writerRepo.FindByNameAsync(w.Name); writersList.Add(new MovieWriter { Movie = createdMovie, // Look if the writer with the same name is in db, if not create a new writer Writer = writerToAdd ?? new Writer { Name = w.Name.Trim(), ImageUrl = w.ImageUrl } }); } createdMovie.WritersLink = writersList; var actorList = new List <MovieActor>(); foreach (Actor a in dto.Actors) { var actorToAdd = await _actorRepo.FindByNameAsync(a.Name); actorList.Add(new MovieActor { Movie = createdMovie, Actor = actorToAdd ?? new Actor { Name = a.Name.Trim(), ImageUrl = a.ImageUrl } }); } createdMovie.ActorsLink = actorList; var directorList = new List <MovieDirector>(); foreach (Director d in dto.Directors) { var directorToAdd = await _directorRepo.FindByNameAsync(d.Name); directorList.Add(new MovieDirector { Movie = createdMovie, Director = directorToAdd ?? new Director { Name = d.Name.Trim(), ImageUrl = d.ImageUrl } }); } createdMovie.DirectorsLink = directorList; return(createdMovie); }