public static string ImportGames(VaporStoreDbContext context, string jsonString) { jsonGame_inp_dto[] dtoInfo = JsonConvert.DeserializeObject <jsonGame_inp_dto[]>(jsonString); StringBuilder sb = new StringBuilder(); List <Genre> genres = new List <Genre>(); List <Developer> developers = new List <Developer>(); List <Tag> tags = new List <Tag>(); List <Game> games = new List <Game>(); foreach (var dto in dtoInfo) { DateTime releaseDate; if (!AttributeValidation.IsValid(dto) || !dto.TagNames.Any() || !DateTime.TryParse(dto.ReleaseDate, out releaseDate)) { sb.AppendLine("Invalid Data"); continue; } Genre genre; if (!genres.Any(x => x.Name == dto.Genre)) { genres.Add(new Genre() { Name = dto.Genre }); } genre = genres.First(x => x.Name == dto.Genre); Developer developer; if (!developers.Any(x => x.Name == dto.DeveloperName)) { developers.Add(new Developer() { Name = dto.DeveloperName }); } developer = developers.First(x => x.Name == dto.DeveloperName); List <GameTag> gameTags = new List <GameTag>(); foreach (var tagName in dto.TagNames) { if (!tags.Any(x => x.Name == tagName)) { tags.Add(new Tag() { Name = tagName }); } gameTags.Add(new GameTag() { Tag = tags.First(x => x.Name == tagName) }); } games.Add(new Game() { Name = dto.Name, Price = dto.Price, ReleaseDate = releaseDate, Developer = developer, Genre = genre, GameTags = gameTags }); sb.AppendLine($"Added {dto.Name} ({dto.Genre}) with {dto.TagNames.Count} tags"); } context.Games.AddRange(games); context.SaveChanges(); return(sb.ToString().Trim()); }