public Album CreateAlbum(string name, string description, bool isPublic, IEnumerable<Tag> tags, int categoryId)
        {
            var oldAlbum = UnitOfWork.Albums.Get(album => album.Name.Equals(name));
            if (oldAlbum != null)
                throw new DataException("Album name already exists.");

            if (tags == null)
            {
                tags = new Tag[] { };
            }

            var newAlbum = new AlbumEntity
            {
                CategoryId = categoryId,
                CreatedOn = DateTime.UtcNow,
                Description = description,
                IsPublic = isPublic,
                Name = name,
                Tags = tags.Select(tag => new TagEntity { Id = tag.Id }).ToList(),
            };

            newAlbum = UnitOfWork.Albums.Add(newAlbum);

            UnitOfWork.Commit();

            return newAlbum.ToModel();
        }
        public Tag UpdateTag(Tag tag)
        {
            var oldTag = UnitOfWork.Tags.GetById(tag.Id);
            if (oldTag == null)
            {
                throw new DataException(string.Format("Tag {0} does not exist.", tag.Name));
            }

            oldTag.Name = tag.Name;
            oldTag.Description = tag.Description;

            return UnitOfWork.Tags.Update(oldTag).ToModel();
        }
        public Album UpdateAlbum(int albumId, string name, string description, bool isPublic, IEnumerable<Tag> tags)
        {
            var oldAlbum = UnitOfWork.Albums.GetById(albumId);
            if (oldAlbum == null)
                throw new DataException("Album could not be retrieved.");

            if (tags == null)
            {
                tags = new Tag[]{};
            }

            oldAlbum.Name = name;
            oldAlbum.Description = description;
            oldAlbum.IsPublic = isPublic;
            oldAlbum.Tags = tags.Select(tag => new TagEntity { Id = tag.Id }).ToList();

            oldAlbum = UnitOfWork.Albums.Update(oldAlbum);
            UnitOfWork.Commit();

            return oldAlbum.ToModel();
        }