// POST api/Albums
        public IHttpActionResult Post([FromBody]AlbumServiceModel value)
        {
            var artists = new GenericRepository<Artist>(Data);
            var songs = new GenericRepository<Song>(Data);

            if (value.Artists != null)
            {
                foreach (var artist in value.Artists)
                {
                    if (!artists.All().Any(x => x.Name == artist))
                    {
                        var newArtist = new Artist { Name = artist };
                        artists.Add(newArtist);
                    }

                    Data.SaveChanges();
                }
            }

            if (value.Songs != null)
            {
                foreach (var song in value.Songs)
                {
                    if (!songs.All().Any(x => x.Title == song))
                    {
                        var newSong = new Song { Title = song };
                        songs.Add(newSong);
                    }

                    Data.SaveChanges();
                }
            }

            var album = new Album
            {
                Title = value.Title,
                Genre = value.Genre,
                ReleasedOn = value.ReleasedOn,
                Artists = artists.All().Where(x => value.Artists.Contains(x.Name)).ToList(),
                Songs = songs.All().Where(x => value.Songs.Contains(x.Title)).ToList()
            };

            AlbumsRepository.Add(album);
            Data.SaveChanges();
            return this.StatusCode(HttpStatusCode.Created);
        }
        // POST api/Songs
        public IHttpActionResult Post([FromBody]SongServiceModel value)
        {
            var artists = new GenericRepository<Artist>(Data);

            if (!artists.All().Any(x => x.Name == value.Artist))
            {
                var newArtist = new Artist { Name = value.Artist };
                artists.Add(newArtist);
                Data.SaveChanges();
            }

            var song = new Song
            {
                Title = value.Title,
                Genre = value.Genre,
                ReleasedOn = value.ReleasedOn,
                Artist = artists.All().FirstOrDefault(x => x.Name == value.Artist),
                ArtistId = artists.All().Where(x => x.Name == value.Artist).Select(x => x.ArtistId).FirstOrDefault()
            };

            SongsRepository.Add(song);
            Data.SaveChanges();
            return this.StatusCode(HttpStatusCode.Created);
        }
        // PUT api/Albums/5
        public IHttpActionResult Put(int id, [FromBody]AlbumServiceModel value)
        {
            var albumToUpdate = AlbumsRepository.All().FirstOrDefault(x => x.AlbumId == id);

            if (albumToUpdate == null)
            {
                return this.BadRequest("No such album");
            }

            var artists = new GenericRepository<Artist>(Data);
            var songs = new GenericRepository<Song>(Data);

            if (value.Artists != null)
            {
                foreach (var artist in value.Artists)
                {
                    if (!artists.All().Any(x => x.Name == artist))
                    {
                        var newArtist = new Artist { Name = artist };
                        artists.Add(newArtist);
                    }

                    Data.SaveChanges();
                }

                albumToUpdate.Artists = artists.All().Where(x => value.Artists.Contains(x.Name)).ToList();
            }

            if (value.Songs != null)
            {
                foreach (var song in value.Songs)
                {
                    if (!songs.All().Any(x => x.Title == song))
                    {
                        var newSong = new Song { Title = song };
                        songs.Add(newSong);
                    }

                    Data.SaveChanges();
                }

                albumToUpdate.Songs = songs.All().Where(x => value.Songs.Contains(x.Title)).ToList();
            }

            if (value.Title != null)
            {
                albumToUpdate.Title = value.Title;
            }

            if (value.Genre != null)
            {
                albumToUpdate.Genre = value.Genre;
            }

            if (value.ReleasedOn != null)
            {
                albumToUpdate.ReleasedOn = value.ReleasedOn;
            }

            Data.SaveChanges();

            return this.ResponseMessage(new HttpResponseMessage(HttpStatusCode.Accepted));
        }