public static void UpdateAlbum(AlbumViewModel album) { if (album.HasErrors) { throw new ArgumentException("Album contains invalid data"); } var existing = _albums.SingleOrDefault(a => a == album); if (existing != null && existing.Model.Id != album.Model.Id) { // Revert to previous values SetViewModelFromModel(album); throw new DuplicateObjectException(); } if (!(album.IsMain ?? false) && MainAlbum == null) { // Undo IsMain change album.IsMain = true; throw new RequiredConstraintViolationException( "You have to set another album as 'Main' before unsetting 'Main'"); } if ((album.IsMain ?? false) && _albums.Where(a => a.IsMain ?? false).Count() > 1) { UnsetPreviousMainAlbum(album); } SetModelFromViewModel(album); AlbumsManager.UpdateAlbum(album.Model); }