public ActionResult CreatePiece(Piece piece)
        {
            if (ModelState.IsValid)
            {
                db.Pieces.Add(piece);
                db.SaveChanges();

                int id = piece.Piece_Id;

                // sort out the paging
                ViewBag.page = 0;
                ViewBag.PageSize = PageSize;

                // data for the Venue dropdown
                IEnumerable<SelectListItem> Venues = db.Venues
                .Where(v => db.Performances.Where(p => p.Performance_PieceId == id).Select(p => p.Event.Event_VenueId).Contains(v.Venue_Id))
                .OrderBy(g => g.Venue_Name)
                .Select(g => new SelectListItem
                {
                    Value = SqlFunctions.StringConvert((double)g.Venue_Id),
                    Text = g.Venue_Name
                })
                ;
                ViewBag.Venues = Venues;

                // data for the City dropdown
                IEnumerable<SelectListItem> cities = db.Venues
                .Where(v => db.Performances.Where(p => p.Performance_PieceId == id).Select(p => p.Event.Event_VenueId).Contains(v.Venue_Id))
                .OrderBy(v => v.Venue_City)
                .Select(v => new SelectListItem
                {
                    Value = v.Venue_City,
                    Text = v.Venue_City
                })
                .Distinct();
                ViewBag.Cities = cities;

                // data for the Country dropdown
                IEnumerable<SelectListItem> countries = db.CountryRegions
                .Where(c => db.Performances.Where(p => p.Performance_PieceId == id).Select(p => p.Event.Venue.Venue_CountryId).Contains(c.CountryRegion_Id))
                .OrderBy(c => c.CountryRegion_Name)
                .Select(c => new SelectListItem
                {
                    Value = SqlFunctions.StringConvert((double)c.CountryRegion_Id),
                    Text = c.CountryRegion_Name
                });
                ViewBag.Countries = countries;

                // set up the filters
                DateTime datetimefilter_from_Event_Date = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
                ViewData["filter_from_Event_Date"] = DateTime.Now.ToLongDateString();

                // data for the pieceArtists
                ViewBag.pieceArtists = db.PieceArtists
                .Where(p => p.PieceArtist_PieceId == id)
                .Take(PageSize+1);

                // data for the roles
                ViewBag.roles = db.Roles
                .Where(p => p.Role_PieceId == id)
                .Take(PageSize+1);

                // data for the performances
                ViewBag.performances = db.Performances
                .Where(p => p.Performance_PieceId == id)
                .Take(PageSize+1);

                return View("Details", piece);
            }
            else
            {
                return Content("Please review your form");
            }
        }
        public ActionResult EditPerformance(Performance performance, string PieceName)
        {
            if (ModelState.IsValid)
            {
                Piece piece = db.Pieces.FirstOrDefault(a => a.Piece_Name == PieceName);
                if (piece != null)
                {
                    //attach the artist
                    performance.Performance_PieceId = piece.Piece_Id;
                }
                else
                {
                    //create a new piece

                    // remove any unnecessary spaces
                    PieceName.Replace("  ", " ").Trim();

                    Piece newPiece = new Piece();
                    newPiece.Piece_Name = PieceName;
                    db.Pieces.Add(newPiece);

                    performance.Performance_PieceId = newPiece.Piece_Id;
                }

                db.Entry(performance).State = EntityState.Modified;
                db.SaveChanges();

                // Can the current user edit this event?
                ViewBag.UserCanEditEvent = true;

                return PartialView("DetailsPerformance", performance);
            }
            else
            {
                return Content("Please review your form");
            }
        }
        public ActionResult EditPiece(Piece piece)
        {
            if (ModelState.IsValid)
            {
                db.Entry(piece).State = EntityState.Modified;
                db.SaveChanges();

                ViewBag.Genre = db.Venues.FirstOrDefault(v => v.Venue_Id == piece.Piece_GenreId);

                return PartialView("DetailsPiece", piece);
            }
            else
            {
                return Content("Please review your form");
            }
        }