public async Task<ActionResult> Edit(int id, Session session)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    session.ConferenceId = ConferenceId;
                    dbContext.Entry(session).State = EntityState.Modified;
                    await dbContext.SaveChangesAsync();

                    return RedirectToAction("Session", new { session.Id });
                }
                catch (Exception ex)
                {
                    ModelState.AddModelError("Updating", ex);
                }
            }
            return View(session);
        }
        public async Task<ActionResult> PromoteSessions(int id, List<int> sessionIds)
        {
            var conferenceId = ConferenceId;

            var cfpSpeaker = await dbContext.CfpSpeakers.Include(s => s.Sessions)
                .Include(s => s.Speaker.Sessions).SingleAsync(s => s.ConferenceId == conferenceId && s.Id == id);
            var cfpSessions = cfpSpeaker.Sessions;
            
            var speaker = cfpSpeaker.Speaker;

            if (sessionIds != null && sessionIds.Any())
            {
                foreach (var s in cfpSessions.Where(s => sessionIds.Contains(s.Id)))
                {
                    var session = new Session()
                    {
                        ConferenceId = conferenceId,
                        Name = s.Name,
                        Slug = s.Name.Slugify(),
                        Description = s.Description,
                    };
                    s.Session = session;
                    speaker.Sessions.Add(new SessionSpeaker()
                    {
                        Session = session
                    });
                }
                await dbContext.SaveChangesAsync();
            }

            return RedirectToAction("Speaker", new { id });
        }
        public async Task<ActionResult> Import(int id, ConferenceImportModel conferenceImportModel)
        {
            using (var oldSwetugg = new SqlConnection(conferenceImportModel.ConnectionString))
            {
                var oldSponsors = oldSwetugg.Query("SELECT * FROM Sponsors");
                foreach (var oldSponsor in oldSponsors)
                {
                    var sponsor = new Sponsor()
                    {
                        ConferenceId = id,
                        Name = oldSponsor.Name,
                        Description = oldSponsor.Description,
                        Web = oldSponsor.Web,
                        Twitter = oldSponsor.Twitter,
                        Priority = oldSponsor.Priority,
                        Published = oldSponsor.Published,
                        Slug = ((string)oldSponsor.Name).Slugify()
                    };
                    _dbContext.Sponsors.Add(sponsor);
                }
                await _dbContext.SaveChangesAsync();

                var oldSpeakers = oldSwetugg.Query("SELECT * FROM Speakers");
                foreach (var oldSpeaker in oldSpeakers)
                {
                    var speaker = new Speaker()
                    {
                        ConferenceId = id,
                        Name = oldSpeaker.Name,
                        Company = oldSpeaker.Company,
                        Bio = oldSpeaker.Bio,
                        GitHub = oldSpeaker.GitHub,
                        Twitter = oldSpeaker.Twitter,
                        Priority = oldSpeaker.Priority,
                        Published = oldSpeaker.Published,
                        Slug = ((string)oldSpeaker.Name).Slugify()
                    };
                    _dbContext.Speakers.Add(speaker);
                }
                await _dbContext.SaveChangesAsync();

                var oldSessions = oldSwetugg.Query(
                    "SELECT s.Id, s.Name, s.Description, s.EmbeddedVideoLink, s.Priority, s.Deleted, ssp.SpeakerId, sp.Name AS SpeakerName " +
                    "FROM Sessions AS s LEFT OUTER JOIN SessionSpeakers AS ssp " +
                    "ON s.Id = ssp.SessionId " +
                    "JOIN Speakers AS sp ON ssp.SpeakerId = sp.Id " +
                    "ORDER BY s.Id");
                int lastId = 0;
                Session session = null;
                foreach (var oldSession in oldSessions)
                {
                    if (lastId != oldSession.Id)
                    {
                        lastId = oldSession.Id;
                        session = new Session()
                        {
                            ConferenceId = id,
                            Name = oldSession.Name,
                            Description = oldSession.Description,
                            VideoUrl = oldSession.EmbeddedVideoLink,
                            VideoPublished = !string.IsNullOrEmpty(oldSession.EmbeddedVideoLink),

                            Priority = oldSession.Priority,
                            Published = !(oldSession.Deleted),
                            Speakers = new List<SessionSpeaker>(),
                            Slug = ((string)oldSession.Name).Slugify()
                        };
                        _dbContext.Sessions.Add(session);
                    }
                    if (oldSession.SpeakerId != null && session != null)
                    {
                        var speakerSlug = ((string) oldSession.SpeakerName).Slugify();
                        var speaker = await _dbContext.Speakers.SingleOrDefaultAsync(s => s.Slug == speakerSlug);
                        if (speaker != null)
                        {
                            session.Speakers.Add(new SessionSpeaker() { Session = session, Speaker = speaker});
                        }
                    }
                }
                await _dbContext.SaveChangesAsync();

                var oldRooms = oldSwetugg.Query("SELECT * FROM Rooms");
                foreach (var oldRoom in oldRooms)
                {
                    var room = new Room()
                    {
                        ConferenceId = id,
                        Name = oldRoom.Name,
                        Description = oldRoom.Description,
                        Priority = oldRoom.Priority,
                        Slug = ((string)oldRoom.Name).Slugify()
                    };
                    _dbContext.Rooms.Add(room);
                }
                await _dbContext.SaveChangesAsync();

                var oldSlots = oldSwetugg.Query("SELECT * FROM Slots");
                foreach (var oldSlot in oldSlots)
                {
                    var slot = new Slot()
                    {
                        ConferenceId = id,
                        Start = oldSlot.Start,
                        End = oldSlot.End,
                        Title = oldSlot.Description
                    };
                    _dbContext.Slots.Add(slot);
                }
                await _dbContext.SaveChangesAsync();

                var allRooms = await _dbContext.Rooms.Where(r => r.ConferenceId == id).ToListAsync();
                var allSessions = await _dbContext.Sessions.Where(r => r.ConferenceId == id).ToListAsync();
                foreach (var slot in await _dbContext.Slots.Where(s => s.ConferenceId == id).ToListAsync())
                {
                    foreach (var room in allRooms)
                    {
                        var oldRoomSlot = oldSwetugg.Query("SELECT rs.SessionId, se.Id, se.Name " +
                                                           "FROM RoomSlots rs " +
                                                           "JOIN Slots s ON rs.SlotId = s.Id " +
                                                           "JOIN Rooms r ON rs.RoomId = r.Id " +
                                                           "JOIN Sessions se ON se.Id = rs.SessionId " +
                                                           "WHERE s.Start = @SlotStart " +
                                                           "AND r.Name = @RoomName", 
                                                           new { SlotStart = slot.Start, RoomName = room.Name}).SingleOrDefault();
                        if (oldRoomSlot != null)
                        {
                            var sessionSlug = ((string) oldRoomSlot.Name).Slugify();
                            session = allSessions.SingleOrDefault(s => s.Slug == sessionSlug);
                            if (slot.RoomSlots == null)
                            {
                                slot.RoomSlots = new List<RoomSlot>();
                            }
                            slot.RoomSlots.Add(new RoomSlot()
                            {
                                Room = room,
                                Slot = slot,
                                AssignedSession = session
                            });
                        }
                    }
                }
                await _dbContext.SaveChangesAsync();
            }

            return RedirectToAction("Conference", new {id});

        }