#pragma warning disable 0108
        public ActionResult Session(string conferenceSlug, int?id)
        #pragma warning restore 0108
        {
            var conference = _conferenceService.GetConferenceBySlug(conferenceSlug);
            var userId     = User.Identity.GetUserId();
            var speaker    = _dbContext.CfpSpeakers.Include(sp => sp.Sessions).SingleOrDefault(sp => sp.UserId == userId && sp.ConferenceId == conference.Id);

            CfpSession session;

            if (id.HasValue)
            {
                session = speaker.Sessions.SingleOrDefault(s => s.Id == id);
            }
            else
            {
                if (!User.IsAllowedToCreateCfp(conference))
                {
                    // CFP Isn't open. Can't create new sessions.
                    return(RedirectToAction("Conference"));
                }
                session = new CfpSession()
                {
                    Speaker = speaker
                };
            }

            ViewBag.Conference = conference;
            ViewBag.Speaker    = speaker;

            return(View(session));
        }
        #pragma warning disable 0108
        public ActionResult Session(string conferenceSlug, int?id, CfpSession session)
        #pragma warning restore 0108
        {
            var conference = _conferenceService.GetConferenceBySlug(conferenceSlug);
            var userId     = User.Identity.GetUserId();
            var speaker    = _dbContext.CfpSpeakers.Include(sp => sp.Sessions).SingleOrDefault(sp => sp.UserId == userId && sp.ConferenceId == conference.Id);

            session.Speaker = speaker;

            if (ModelState.IsValid)
            {
                try
                {
                    var dbSession = id.HasValue ? speaker.Sessions.SingleOrDefault(s => s.Id == id) : null;
                    if (dbSession == null)
                    {
                        if (!User.IsAllowedToCreateCfp(conference))
                        {
                            // CFP Isn't open. Can't create new sessions.
                            return(RedirectToAction("Conference"));
                        }
                        dbSession = new CfpSession();
                        _dbContext.Entry(dbSession).State = EntityState.Added;
                        dbSession.ConferenceId            = conference.Id;
                        speaker.Sessions.Add(dbSession);
                    }
                    dbSession.Name        = session.Name;
                    dbSession.Description = session.Description;
                    dbSession.Comments    = session.Comments;
                    dbSession.Audience    = session.Audience;
                    dbSession.Level       = session.Level;
                    dbSession.Tags        = session.Tags;
                    dbSession.LastUpdate  = DateTime.UtcNow;

                    _dbContext.SaveChanges();
                    return(RedirectToAction("Conference"));
                }
                catch (Exception ex)
                {
                    ModelState.AddModelError("Saving", ex);
                }
            }

            ViewBag.Conference = conference;
            ViewBag.Speaker    = speaker;
            return(View(session));
        }