public int AddBatchMovieActorMap(Movie movie, List <Actor> actors) { if (movie == null) { throw new Exception("Movie is null"); } if (actors == null) { throw new Exception("Actors list is empty"); } foreach (var actor in actors) { if (actor == null) { continue; } var movieActorMapping = new MovieActorMapping { Movie = movie, Actor = actor }; _context.MovieActorMappings.Add(new MovieActorMapping() { MovieId = movie.Id, ActorId = actor.Id }); } var records = _context.SaveChanges(); return(records); }
public ActorCreationData UpdateSec(ActorCreationData actorCreationData) { using (var entityContext = new MovieDbContext()) { // peki existing null ise? var existingActor = (from x in entityContext.ActorSet where x.Id == actorCreationData.Id select x).FirstOrDefault(); SimpleMapper.PropertyMap(actorCreationData, existingActor); var currentMovieActorMappings = entityContext.MovieActorMappingSet.Where(t => t.ActorId == actorCreationData.Id).ToList(); if (actorCreationData.MovieIds == null) { actorCreationData.MovieIds = new int[] {} } ; if (currentMovieActorMappings.Count > actorCreationData.MovieIds.Count()) { for (int i = 0; i < actorCreationData.MovieIds.Count(); i++) { currentMovieActorMappings[i].MovieId = actorCreationData.MovieIds[i]; } //2 for (int i = actorCreationData.MovieIds.Count(); i < currentMovieActorMappings.Count; i++) { entityContext.MovieActorMappingSet.Remove(currentMovieActorMappings[i]); } entityContext.SaveChanges(); } else { int index = 0; foreach (var currentGenreMap in currentMovieActorMappings) { currentGenreMap.MovieId = actorCreationData.MovieIds[index]; index++; } if (actorCreationData.MovieIds.Count() != currentMovieActorMappings.Count) { for (int i = index; i < actorCreationData.MovieIds.Count(); i++) { var newMovieActorMapping = new MovieActorMapping() { ActorId = actorCreationData.Id, MovieId = actorCreationData.MovieIds[i] }; entityContext.MovieActorMappingSet.Add(newMovieActorMapping); } } entityContext.SaveChanges(); } } return(null); }
public int AddMovieActorMap(Movie movie, Actor actor) { if (movie == null) { throw new Exception("Movie is null"); } if (actor == null) { throw new Exception("Actor is null"); } var movieActorMapping = new MovieActorMapping { Movie = movie, Actor = actor }; _context.Add(movieActorMapping); var records = _context.SaveChanges(); return(records); }
public MovieCreationData UpdateSec(MovieCreationData movieCreationData) { if (movieCreationData.GenreIds == null) { movieCreationData.GenreIds = new int[] {} } ; if (movieCreationData.SubGenreIds != null && movieCreationData.SubGenreIds.Count() > 0) { movieCreationData.GenreIds = movieCreationData.GenreIds.Union(movieCreationData.SubGenreIds).ToArray(); } using (var entityContext = new MovieDbContext()) { var existingMovie = (from m in entityContext.MovieSet where m.Id == movieCreationData.Id select m).FirstOrDefault(); SimpleMapper.PropertyMap(movieCreationData, existingMovie); entityContext.SaveChanges(); // ADIM 1 // var currentGenreMappings = entityContext.MovieGenreMappingSet.Where(t => t.MovieId == movieCreationData.Id).ToList(); // (True ise) Güncel Movie'de, veritabanındaki haline kıyasla, daha az Genre (Mapping) bulunmakta.. if (currentGenreMappings.Count > movieCreationData.GenreIds.Count()) { for (int i = 0; i < movieCreationData.GenreIds.Count(); i++) { currentGenreMappings[i].GenreId = movieCreationData.GenreIds[i]; } //2 for (int i = movieCreationData.GenreIds.Count(); i < currentGenreMappings.Count; i++) { entityContext.MovieGenreMappingSet.Remove(currentGenreMappings[i]); } entityContext.SaveChanges(); } else { int index = 0; foreach (var currentGenreMap in currentGenreMappings) { currentGenreMap.GenreId = movieCreationData.GenreIds[index]; index++; } if (movieCreationData.GenreIds.Count() != currentGenreMappings.Count) { for (int i = index; i < movieCreationData.GenreIds.Count(); i++) { var newGenreMapping = new MovieGenreMapping() { MovieId = movieCreationData.Id, GenreId = movieCreationData.GenreIds[i] }; entityContext.MovieGenreMappingSet.Add(newGenreMapping); } } entityContext.SaveChanges(); } // ADIM 2 // var currentActorMappings = entityContext.MovieActorMappingSet.Where(t => t.MovieId == movieCreationData.Id).ToList(); // (True ise) Güncel Movie'de, veritabanındaki haline kıyasla, daha az Actor (Mapping) bulunmakta.. if (movieCreationData.ActorIds.Count() < currentActorMappings.Count) { for (int i = 0; i < movieCreationData.ActorIds.Count(); i++) { currentActorMappings[i].ActorId = movieCreationData.ActorIds[i]; } //2 for (int i = movieCreationData.ActorIds.Count(); i < currentActorMappings.Count; i++) { entityContext.MovieActorMappingSet.Remove(currentActorMappings[i]); } entityContext.SaveChanges(); } else { int index = 0; foreach (var currentActorMap in currentActorMappings) { currentActorMap.ActorId = movieCreationData.ActorIds[index]; index++; } if (movieCreationData.ActorIds.Count() != currentActorMappings.Count) { for (int i = index; i < movieCreationData.ActorIds.Count(); i++) { var newActorMapping = new MovieActorMapping() { MovieId = movieCreationData.Id, ActorId = movieCreationData.ActorIds[i] }; entityContext.MovieActorMappingSet.Add(newActorMapping); } } entityContext.SaveChanges(); } } return(movieCreationData); }
public static void SeedActorsTop1000() { var actors = XDocument.Load(@"C:\seed\New_\active.xml"); var actorsName = actors.Elements("Top1000").Elements("Actor").Elements("Name").Select(t => t.Value).ToList(); var actorsConst = actors.Elements("Top1000").Elements("Actor").Elements("Const").Select(t => t.Value).ToList(); var actorsKnownFor = actors.Elements("Top1000").Elements("Actor").Elements("KnownFor").Select(t => t.Value).ToList(); var actorsIsMale = actors.Elements("Top1000").Elements("Actor").Elements("IsMale").Select(t => t.Value).ToList(); var actorsBirthDate = actors.Elements("Top1000").Elements("Actor").Elements("Birth").Select(t => t.Value).ToList(); var forCount = actorsName.Count; var list = new List <string>(); var firstLastNameSeperated = new List <Seeder.FirstLastName>(); foreach (var actorFullName in actorsName) { var splitted = actorFullName.Split(' '); switch (splitted.Count()) { case 1: list.Add(actorFullName); break; case 2: firstLastNameSeperated.Add(new Seeder.FirstLastName() { First = splitted[0], Last = splitted[1] }); break; case 3: firstLastNameSeperated.Add(new Seeder.FirstLastName() { First = splitted[0], Last = splitted[1] + " " + splitted[2] }); break; case 4: firstLastNameSeperated.Add(new Seeder.FirstLastName() { First = splitted[0], Last = splitted[1] + " " + splitted[2] + " " + splitted[3] }); break; } } var birthdateFinal = new List <DateTime>(); foreach (var year in actorsBirthDate) { DateTime dateOut; DateTime.TryParse(year, out dateOut); var dateFinal = dateOut.ToShortDateString(); birthdateFinal.Add(dateOut); } using (var context = new MovieDbContext()) { for (int i = 0; i < forCount; i++) { var actorKnownForMovieId = actorsKnownFor[i]; Movie isThereAmovie = context.MovieSet.FirstOrDefault(t => t.ImdbLink == actorKnownForMovieId); if (isThereAmovie != null) // Film var mı? : Film var. { // Peki aktör var mı? string actorName = actorsName[i]; Actor isThereAnActor = context.ActorSet.FirstOrDefault(t => t.FullName == actorName); if (isThereAnActor == null) // böyle bir aktör yok (map da olamaz). ama bu aktörün (known for) movie'si var. { var actorToDb = new Actor() { Biography = "", BirthDate = birthdateFinal[i], CreatedAt = isThereAmovie.CreatedAt, DeathDate = null, FirstName = firstLastNameSeperated[i].First, LastName = firstLastNameSeperated[i].Last, FullName = actorsName[i], Gender = Convert.ToBoolean(actorsIsMale[i]), CountryId = 1, CountyId = 1, StateId = 1, ImdbLink = actorsConst[i], Photo = "null" }; context.ActorSet.Add(actorToDb); context.SaveChanges(); context.MovieActorMappingSet.Add(new MovieActorMapping() { MovieId = isThereAmovie.Id, ActorId = actorToDb.Id }); context.SaveChanges(); } else { // böyle bir aktör var. Film de vardı. O zaman map yapma zamanı. // Tabii hali hazırda map yoksa... // önce gender ayarı MovieActorMapping mp = context.MovieActorMappingSet .FirstOrDefault(t => t.MovieId == isThereAmovie.Id && t.ActorId == isThereAnActor.Id); if (mp == null) // map yok { context.MovieActorMappingSet.Add(new MovieActorMapping() { MovieId = isThereAmovie.Id, ActorId = isThereAnActor.Id }); context.SaveChanges(); } } } else { // Actor için KnownFor FİLM YOK. Peki böyle bir Actor var mı? string actorName = actorsName[i]; Actor isThereAnActor = context.ActorSet.FirstOrDefault(t => t.FullName == actorName); if (isThereAnActor == null) // böyle bir aktör de YOK: ekle o zaman. { var actorToDb = new Actor() { Biography = "", BirthDate = birthdateFinal[i], CreatedAt = DateTime.Now, DeathDate = null, FirstName = firstLastNameSeperated[i].First, LastName = firstLastNameSeperated[i].Last, FullName = actorsName[i], Gender = Convert.ToBoolean(actorsIsMale[i]), CountryId = 1, CountyId = 1, StateId = 1, ImdbLink = actorsConst[i], Photo = "null" }; context.ActorSet.Add(actorToDb); context.SaveChanges(); } } } } }
/// <summary> /// Bu metot 246 filmde oynayan aktörlerin isimlerini alıyor /// Bu isimlerde veritabanında aktör var ise /// Bu aktörler ile ActorMovieMap tablosunu seed'liyor. /// Aktör yok ise bir şey yapmıyor /// DUPLICATE SORUNU YOK /// </summary> private static void Seed_RatedMoviesXML_MovieInfo_Actors() { var listXMContainer = new List <XMLContainer>(); var xdocList = new List <XDocument>(); var xdocActors = new List <string>(); var folderPath = @"C:\seed\xml\"; foreach (string file in Directory.EnumerateFiles(folderPath, "*.xml")) { string contents = File.ReadAllText(file, Encoding.UTF8); xdocList.Add(XDocument.Parse(contents)); } foreach (XDocument xDocument in xdocList) { var container = new XMLContainer(); container.Actors = new List <string>(); foreach (var xx in xDocument.Descendants("movie").Attributes()) { switch (xx.Name.ToString()) { case "actors": var splitted = xx.Value.Split(','); foreach (var per in splitted) { if (per[0].ToString() == " ") { xdocActors.Add(per.Remove(0, 1)); container.Actors.Add(per.Remove(0, 1)); } else { xdocActors.Add(per); container.Actors.Add(per); } } break; case "plot": container.Plot = xx.Value; break; case "language": container.Language = xx.Value; break; case "imdbID": container.ImdbId = xx.Value; break; } } listXMContainer.Add(container); } using (var context = new MovieDbContext()) { foreach (var xmlContainer in listXMContainer) { var movie = (from m in context.MovieSet where m.ImdbLink == xmlContainer.ImdbId select m).First(); movie.PlotOutline = xmlContainer.Plot; foreach (var actor in xmlContainer.Actors) { var possibleNullActor = context.ActorSet.FirstOrDefault(t => t.FullName == actor); if (possibleNullActor == null) { // aktör yoksa bir şey yapma } else { // aktör var // peki hali hazırda map var mı? MovieActorMapping possibleNullMap = context.MovieActorMappingSet.FirstOrDefault( t => t.MovieId == movie.Id && t.ActorId == possibleNullActor.Id); if (possibleNullMap == null) // map yok { context.MovieActorMappingSet.Add(new MovieActorMapping() { ActorId = possibleNullActor.Id, MovieId = movie.Id, }); context.SaveChanges(); } } } string movieLanguage = xmlContainer.Language.Split(',')[0]; var possibleNullLanguage = context.LanguageSet.FirstOrDefault(t => t.Name == movieLanguage); if (possibleNullLanguage == null) { var language = new Language() { Name = movieLanguage }; context.LanguageSet.Add(language); context.SaveChanges(); movie.LanguageId = language.Id; } else { movie.LanguageId = possibleNullLanguage.Id; context.SaveChanges(); } } } }